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 call
f`を想定します。
>>> 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回は位置で)
お役に立てれば