fは3つの引数(、、、、この順序で)を期待してxいますy。z
と仮定しL = [1,2]ます。を呼び出すときf(3, *L)、Pythonが舞台裏で行うf(3, 1, 2)ことは、の長さを実際に知らなくても、を呼び出すことですL。
Lでは、代わりにだったらどうなる[1,2,3]でしょうか?
次に、を呼び出すとf(3, *L)、を呼び出すことになります。これは、正確に3つの引数を期待していて、4を指定しf(3,1,2,3)たため、エラーになります。f
ここで、L=[1,2]1. Look at what happens when you callf`を想定します。
>>> f(3,*L) # works fine
>>> f(*L) # will give you an error when f(1,2) is called; insufficient arguments
f(*L, 3)これで、 3を呼び出すと暗黙的にわかりますzが、pythonはそれを認識しません。j入力の最後の多くの要素がfの内容によって定義されることだけを知っていLます。ただし、の値がわからないため、引数の数が正しいlen(L)かどうかを推測することはできません。f(*L,3)
ただし、これは。の場合には当てはまりませんf(3,*L)。この場合、Pythonは、最初の引数を除くすべての引数が。の内容によって定義されることを認識していますL。
ただし、引数f(x=1, y=2, z=3)に名前を付けた場合は、名前で割り当てられている引数が最初にバインドされます。そうして初めて、位置引数がバインドされます。だからあなたはしますf(*L, z=3)。その場合、zは最初にバインドされ3、次に他の値がバインドされます。
興味深いことに、これを行った場合、2回f(*L, y=3)割り当てようとするとエラーが発生しますy(1回はキーワードで、もう1回は位置で)
お役に立てれば