166

このコードが SyntaxError をスローするのはなぜですか?

  >>> def fun1(a="who is you", b="True", x, y):
...     print a,b,x,y
... 
  File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

次のコードは、目に見えるエラーなしで実行されます。

>>> def fun1(x, y, a="who is you", b="True"):
...     print a,b,x,y
... 
4

4 に答える 4

20
SyntaxError: non-default argument follows default argument

これを許可すると、デフォルト以外の引数が の後に来るため、デフォルト値を使用できなくなるため、デフォルト引数は役に立たなくなります。

ただし、Python 3 では、次のことを行うことができます。

def fun1(a="who is you", b="True", *, x, y):
    pass

あなたがこれを行うことができるのでx、キーワードのみを作成します:y

fun1(x=2, y=2)

あいまいさがなくなるため、これは機能します。まだできないことに注意してくださいfun1(2, 2)(デフォルトの引数を設定します)。

于 2013-06-05T06:33:46.673 に答える
0

必須の引数 (デフォルトのないもの) は、クライアント コードが 2 つだけを提供できるようにするために、先頭にある必要があります。オプションの引数が最初にあると、混乱します。

fun1("who is who", 3, "jack")

それはあなたの最初の例で何をしますか? 最後に、x は「who is who」、y は 3、a = 「ジャック」です。

于 2013-06-05T06:27:39.653 に答える