Pythonは私の最初の動的言語です。最近、誤った数の引数を提供する関数呼び出しをコーディングしました。これは、関数が呼び出されたときに例外で失敗しました。動的言語であっても、ソースファイルを解析するときにこの種のエラーが検出されることを期待していました。
同じ変数に異なるタイプの値が含まれている可能性があるため、関数が呼び出されるまで実際の引数のタイプは不明であることを理解しています。ただし、引数の数は、ソースファイルが解析されるとすぐにわかります。プログラムの実行中は変更されません。
これをスタックオーバーフローの範囲内に保つために、このような質問をします。Pythonが提供する、コードが実際に実行されるまで関数呼び出しの引数の数のチェックを遅らせる必要がある機能はありますか?
Pythonは、どのオブジェクトを呼び出すかを事前に知ることができません。動的であるため、関数オブジェクトを交換できるからです。いつでも。そして、これらのオブジェクトはそれぞれ異なる数の引数を持つことができます。
ここに極端な例があります:
import random
def foo(): pass
def bar(arg1): pass
def baz(arg1, arg2): pass
the_function = random.choice([foo, bar, baz])
print(the_function())
上記のコードには、例外が発生する可能性が2分の3の確率があります。しかし、それが当てはまるかどうか、Pythonはアプリオリを知ることができません!
また、動的モジュールのインポート、動的関数の生成、その他の呼び出し可能なオブジェクト(__call__
メソッドを持つ任意のオブジェクトを呼び出すことができます)、またはすべての引数(*args
と**kwargs
)も使用していません。
しかし、これをさらに明確にするために、質問で次のように述べます。
プログラムの実行中は変更されません。
これは、Pythonでは行われません。モジュールがロードされると、関数オブジェクトを含む、モジュール名前空間内のオブジェクトを削除、追加、または置換できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加