関数の引数の順序付けにおける構文エラーを明らかにする
次の Python コードで SyntaxError が発生するのはなぜですか?
def fun1(a="who is you", b="True", x, y): print a,b,x,y
エラーの理由は、関数シグネチャ内でデフォルト以外の引数 (x と y) がデフォルトの引数 (a と b) よりも前にある必要があるためです。必須パラメータは、デフォルト値を持つオプションのパラメータの前に指定する必要があります。
混合モードの危険性
デフォルト以外の引数をデフォルト引数の後に許可すると、インタープリタに曖昧さが生じます。どの値がどの引数に対応するかを決定します。次のシナリオを考えてみましょう:
def fun1(a, b, x="who is you", y="True"): ...
次の引数を指定してこの関数を呼び出すとします:
fun1(1, "ok") # 1 assigned to x, "ok" assigned to a or b?
順序付けルールがなければ、引数に値を明確に割り当てることは不可能です。
関数の引数の正しい構文
関数を正しく定義するには、デフォルトの引数は常にデフォルト以外の引数の後に続く必要があります。関数例の正しい構文は次のとおりです。
def fun1(x, y, a="who is you", b="True"): ...
この構文により、キーワード引数や引数が欠落している場合でも、インタープリターは決定論的な方法で引数に値を割り当てることができます。
キーワード引数 Rescue
キーワード引数を使用すると、引数名を明示的に指定することでデフォルト値をオーバーライドできます。これは、欠落している引数をスキップする場合に特に便利です。たとえば、次の fun1 の呼び出しについて考えてみましょう。
fun1(x=1, b="False") # Override default value of b
結論
デフォルト引数に続く非デフォルト引数の制限により、関数呼び出しの明確で明確な解釈が保証されます。 、誤った引数の割り当てによる構文エラーや実行時エラーを防ぎます。
以上がPython 関数定義では、デフォルト以外の引数をデフォルトの引数の前に置く必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。