Python 関数定義では、デフォルト以外の引数をデフォルトの引数の前に置く必要があるのはなぜですか?

Barbara Streisand
リリース: 2024-10-31 23:33:28
オリジナル
640 人が閲覧しました

Why Do Non-Default Arguments Have to Precede Default Arguments in Python Function Definitions?

関数の引数の順序付けにおける構文エラーを明らかにする

次の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!