なぜPythonは引数の数が間違っている関数呼び出しを許可するのですか?

こんにちは :

Pythonは私の最初の動的言語です。最近、誤った数の引数を提供する関数呼び出しをコーディングしました。これは、関数が呼び出されたときに例外で失敗しました。動的言語であっても、ソースファイルを解析するときにこの種のエラーが検出されることを期待していました。

同じ変数に異なるタイプの値が含まれている可能性があるため、関数が呼び出されるまで実際の引数タイプは不明であることを理解しています。ただし、引数は、ソースファイルが解析されるとすぐにわかります。プログラムの実行中は変更されません。

これが哲学的な質問ではないように

これをスタックオーバーフローの範囲内に保つために、このような質問をします。Pythonが提供する、コードが実際に実行されるまで関数呼び出しの引数の数のチェックを遅らせる必要がある機能はありますか?

Martijn Pieters:

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]

編集
0

コメントを追加

0

関連記事

分類Dev

呼び出しメソッドを呼び出すと「引数の数が間違っています」例外が発生するのはなぜですか(JAVA)

分類Dev

リフレクションを使用して可変引数を持つメソッドを呼び出すときに、Java.lang.IllegalArgumentException:引数の数が間違っているのはなぜですか

分類Dev

リフレクションを使用して可変引数を持つメソッドを呼び出すときに、Java.lang.IllegalArgumentException:引数の数が間違っているのはなぜですか

分類Dev

期待される関数が呼び出されないのはなぜですか?型の特徴を間違って理解していますか?

分類Dev

externを使用しているときに、間違ったシグネチャで関数を呼び出すことができるのはなぜですか?

分類Dev

VBA Excel:引数の数が間違っているか、関数の呼び出しでプロパティの割り当てが無効です

分類Dev

Ncurses-関数呼び出しに複数の引数が存在するのに、mvprintw()を使用して文字列を出力しないのはなぜですか?

分類Dev

関数を呼び出せなくても、関数呼び出しの引数部分の式が評価されるのはなぜですか?

分類Dev

関数が呼び出された変数参照を変更するのは間違っていますか?

分類Dev

Lua-関数呼び出し後の文字列が許可されるのはなぜですか?

分類Dev

引数の数が可変のC関数は、引数の数が少ない状態で呼び出されると、予期しない出力を返します。

分類Dev

Rustがnullポインターを介して関数の呼び出しを許可するのはなぜですか?

分類Dev

引数のない関数呼び出しがより速く実行されるのはなぜですか?

分類Dev

なぜ私のコスト関数が間違った答えを出しているのですか?

分類Dev

PLSQLで日付を比較するときの「 '>'の呼び出しでの引数の数またはタイプが間違っています」

分類Dev

Kotlinが引数なしでmain関数の書き込みを許可するのはなぜですか?

分類Dev

コードを関数として呼び出す方が、Clozure Common lispで直接呼び出すよりも時間がかかるのはなぜですか?

分類Dev

C ++では、関数の外部での関数呼び出しを許可していますか?

分類Dev

form_tagの引数の数(1対2)が間違っているのはなぜですか

分類Dev

Javascript:すでに外部関数を使用しているのに、自己呼び出し無名関数を定義する必要があるのはなぜですか?

分類Dev

4つのdivを作成するループ関数が間違っているのはなぜですか?

分類Dev

メソッドを呼び出すときの引数の数が間違っているエラー

分類Dev

Pythonで変数を引数として使用してこの関数を呼び出せないのはなぜですか?

分類Dev

Rのt検定関数からの自由度が間違っている、および/または一貫していないのはなぜですか?

分類Dev

関数が、呼び出し元が認識しているように一部の引数を変更できるが、他の引数は変更できないのはなぜですか?

分類Dev

なぜ関数呼び出しに時間がかかるのですか?

分類Dev

Pythonでは、関数パラメーターが関数呼び出し間で値を維持するのはなぜですか

分類Dev

Cで1つの引数を使用して定義されているのに、引数なしで関数を呼び出すことができるのはなぜですか?

分類Dev

関数の引数としてautoが許可されないのはなぜですか?

Related 関連記事

  1. 1

    呼び出しメソッドを呼び出すと「引数の数が間違っています」例外が発生するのはなぜですか(JAVA)

  2. 2

    リフレクションを使用して可変引数を持つメソッドを呼び出すときに、Java.lang.IllegalArgumentException:引数の数が間違っているのはなぜですか

  3. 3

    リフレクションを使用して可変引数を持つメソッドを呼び出すときに、Java.lang.IllegalArgumentException:引数の数が間違っているのはなぜですか

  4. 4

    期待される関数が呼び出されないのはなぜですか?型の特徴を間違って理解していますか?

  5. 5

    externを使用しているときに、間違ったシグネチャで関数を呼び出すことができるのはなぜですか?

  6. 6

    VBA Excel:引数の数が間違っているか、関数の呼び出しでプロパティの割り当てが無効です

  7. 7

    Ncurses-関数呼び出しに複数の引数が存在するのに、mvprintw()を使用して文字列を出力しないのはなぜですか?

  8. 8

    関数を呼び出せなくても、関数呼び出しの引数部分の式が評価されるのはなぜですか?

  9. 9

    関数が呼び出された変数参照を変更するのは間違っていますか?

  10. 10

    Lua-関数呼び出し後の文字列が許可されるのはなぜですか?

  11. 11

    引数の数が可変のC関数は、引数の数が少ない状態で呼び出されると、予期しない出力を返します。

  12. 12

    Rustがnullポインターを介して関数の呼び出しを許可するのはなぜですか?

  13. 13

    引数のない関数呼び出しがより速く実行されるのはなぜですか?

  14. 14

    なぜ私のコスト関数が間違った答えを出しているのですか?

  15. 15

    PLSQLで日付を比較するときの「 '>'の呼び出しでの引数の数またはタイプが間違っています」

  16. 16

    Kotlinが引数なしでmain関数の書き込みを許可するのはなぜですか?

  17. 17

    コードを関数として呼び出す方が、Clozure Common lispで直接呼び出すよりも時間がかかるのはなぜですか?

  18. 18

    C ++では、関数の外部での関数呼び出しを許可していますか?

  19. 19

    form_tagの引数の数(1対2)が間違っているのはなぜですか

  20. 20

    Javascript:すでに外部関数を使用しているのに、自己呼び出し無名関数を定義する必要があるのはなぜですか?

  21. 21

    4つのdivを作成するループ関数が間違っているのはなぜですか?

  22. 22

    メソッドを呼び出すときの引数の数が間違っているエラー

  23. 23

    Pythonで変数を引数として使用してこの関数を呼び出せないのはなぜですか?

  24. 24

    Rのt検定関数からの自由度が間違っている、および/または一貫していないのはなぜですか?

  25. 25

    関数が、呼び出し元が認識しているように一部の引数を変更できるが、他の引数は変更できないのはなぜですか?

  26. 26

    なぜ関数呼び出しに時間がかかるのですか?

  27. 27

    Pythonでは、関数パラメーターが関数呼び出し間で値を維持するのはなぜですか

  28. 28

    Cで1つの引数を使用して定義されているのに、引数なしで関数を呼び出すことができるのはなぜですか?

  29. 29

    関数の引数としてautoが許可されないのはなぜですか?

ホットタグ

アーカイブ