回答:
すべての必須パラメーターは、デフォルトの引数の前に配置する必要があります。デフォルトの引数は必須ではないが、それらは必須であるためです。構文的には、混合モードが許可されている場合、インタープリターがどの値がどの引数に一致するかを決定することは不可能です。あSyntaxError引数が正しい順序で指定されていない場合は、が発生します。
関数を使用して、キーワード引数を見てみましょう。
def fun1(a="who is you", b="True", x, y):
... print a,b,x,y
上記のように関数の宣言が許可されているとします。次に、上記の宣言を使用して、次の(通常の)位置またはキーワード引数を呼び出すことができます。
func1("ok a", "ok b", 1) # Is 1 assigned to x or ?
func1(1) # Is 1 assigned to a or ?
func1(1, 2) # ?
関数呼び出しでの変数の割り当てをどのように提案するか、デフォルト引数がキーワード引数とともにどのように使用されるか。
>>> def fun1(x, y, a="who is you", b="True"):
... print a,b,x,y
...
リファレンスO'Reilly-Core-Python
この関数はデフォルトの引数を使用するので、上記の関数呼び出しに対して構文的に正しい。キーワード引数呼び出しは、順序が狂った位置引数を提供できるので便利ですが、デフォルト引数と組み合わせることで、欠落している引数を「スキップ」することもできます。
func1(x=1, y=2)。
**kwargsは作れないと思いましたdef fun1(a="who is you", b="True", x, y)。を使用する場合def f(**kwargs)、本体のデフォルト値を処理する必要がありますか?
def fun1(a="who is you", b="True", x, y)は、同じことを異なるスタイルで実現できます。if def fun1(** kwrgs) ` fun1({'a': 'who is you', 'b': True})の場合、xとyを渡す必要はありません。
def foo(x=None, y)許可されていても、まったく同じように機能すると思います。だから、なぜこれがPythonで許可されていないのか、私はまだ興味があります。本当の根本的な理由はありますか、それとも「許可しないため許可しない」だけですか。
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)(デフォルトの引数が設定されます)。
ここで2つのポイントを明確にしましょう:
def example(a, b, c=None, r="w" , d=[], *ae, **ab):
(a、b)は位置パラメータです
(c = none)はオプションのパラメーターです
(r = "w")はキーワードパラメータです
(d = [])はリストパラメータです
(* ae)はキーワードのみです
(** ab)はvar-keywordパラメータです
def example(a, b, c=a,d=b):デフォルト値が保存されるときに引数が定義されていない、関数を定義するときにPythonがデフォルト値を計算して保存する
これが発生した場合、cとdは定義されておらず、存在しません(関数の実行時にのみ存在します)。
"a、a = b"はパラメーターでは使用できません。
def myfunction(position_arguments, *arguments, **keywords):`....` を定義したときの構造です