Python-Argumente, aber Positionsargumente, Schlüsselwortargumente, Nur-Schlüsselwort-Argumente Ich war verwirrt darüber, dass ich mit \ *, ** mehrere Argumente erhalten habe, also habe ich es geklärt.
def f(a, b):
return a, b
f(1, 2)
=======================
(1, 2)
Argumente, die wie a = 1 übergeben werden, werden als Schlüsselwortargumente bezeichnet, und die Reihenfolge, in der sie übergeben werden, ist irrelevant.
def f(a, b):
return a, b
f(b=2, a=1)
=======================
(1, 2)
Sie können kein Positionsargument nach einem Schlüsselwortargument übergeben.
def f(a, b):
return a, b
f(b=2, 1)
=======================
SyntaxError: positional argument follows keyword argument
Sie können * verwenden, um Argumente variabler Länge als Tupel zu übergeben.
def f(a, b, *c):
return a, b, c
f(1, 2, 3, 4)
=======================
(1, 2, (3, 4))
Sie können ** verwenden, um Schlüsselwortargumente variabler Länge als Diktat zu übergeben.
def f(a, b, **c):
return a, b, c
f(1, 2, x=3, y=4)
=======================
(1, 2, {'x': 3, 'y': 4})
Positionsargumente können nach Argumenten mit \ * nicht zugewiesen werden.
def f(a, *b, c):
return a, b, c
f(1, 2, 3, 4)
=======================
TypeError: f() missing 1 required keyword-only argument: 'c'
Es scheint, dass nach ** weder Positionsargumente noch Schlüsselwortargumente zugewiesen werden können.
def f(a, **b, c):
return a, b, c
f(1, x=2, y=3, c=4)
=======================
SyntaxError: invalid syntax
Sie können jetzt nur Schlüsselwortargumente aus Python 3 angeben. Argumente, die nach einem Argument mit einem führenden * stehen, können nur als Schlüsselwortargument zugewiesen werden. Im Folgenden sollte c als Schlüsselwortargument anstelle eines Positionsarguments zugewiesen werden.
def f(a, *b, c):
return a, b, c
f(1, 2, 3, c=4)
=======================
(1, (2, 3), 4)
Wenn Sie keine Positionsargumente variabler Länge verwenden, geben Sie * allein an. Die nachfolgenden Argumente sind reine Schlüsselwortargumente.
def f(a, *, b):
return a, b
f(1, 2)
=======================
TypeError: f() takes 1 positional argument but 2 were given
def f(a, *, b):
return a, b
f(1, b=2)
=======================
(1, 2)
Wie ich Ihnen in den Kommentaren sagte, scheint es auch nur Positionsargumente zu geben. https://docs.python.org/ja/3/tutorial/controlflow.html#positional-only-parameters
def f(x, y):
print(x, y)
f(y=456, x=123)
============================
123 456
def f(x, y, /):
print(x, y)
f(y=456, x=123)
============================
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got some positional-only arguments passed as keyword arguments: 'x, y'
f(x=123, y=456)
============================
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got some positional-only arguments passed as keyword arguments: 'x, y'
f(123, 456)
============================
123 456
Um diese Zeit, als ich von anderen Leuten darauf hingewiesen wurde, dachte ich, es könnte eine gute Studie sein, weil es peinlich war.
Recommended Posts