arguments python, mais arguments positionnels, arguments de mot-clé, arguments de mot-clé uniquement J'ai été confus quant à l'obtention de plusieurs arguments en utilisant \ *, **, donc je l'ai réglé.
def f(a, b):
return a, b
f(1, 2)
=======================
(1, 2)
Les arguments passés comme a = 1 sont appelés arguments de mot-clé, et l'ordre dans lequel ils sont passés n'est pas pertinent.
def f(a, b):
return a, b
f(b=2, a=1)
=======================
(1, 2)
Vous ne pouvez pas passer un argument de position après un argument de mot-clé.
def f(a, b):
return a, b
f(b=2, 1)
=======================
SyntaxError: positional argument follows keyword argument
Vous pouvez utiliser * pour transmettre des arguments de longueur variable sous forme de tuples.
def f(a, b, *c):
return a, b, c
f(1, 2, 3, 4)
=======================
(1, 2, (3, 4))
Vous pouvez utiliser ** pour transmettre des arguments de mots clés de longueur variable sous forme de dict.
def f(a, b, **c):
return a, b, c
f(1, 2, x=3, y=4)
=======================
(1, 2, {'x': 3, 'y': 4})
Les arguments positionnels ne peuvent pas être affectés après les arguments utilisant \ *.
def f(a, *b, c):
return a, b, c
f(1, 2, 3, 4)
=======================
TypeError: f() missing 1 required keyword-only argument: 'c'
Il semble que ni les arguments de position ni les arguments de mots-clés ne peuvent être affectés après **.
def f(a, **b, c):
return a, b, c
f(1, x=2, y=3, c=4)
=======================
SyntaxError: invalid syntax
Vous pouvez désormais spécifier des arguments de mots clés uniquement à partir de Python 3. Les arguments qui viennent après un argument précédé d'une * ne peuvent être affectés qu'en tant qu'argument de mot-clé. Dans ce qui suit, c doit être affecté en tant qu'argument de mot-clé au lieu d'un argument de position.
def f(a, *b, c):
return a, b, c
f(1, 2, 3, c=4)
=======================
(1, (2, 3), 4)
Si vous n'utilisez pas d'arguments de position de longueur variable, spécifiez * seul, et les arguments suivants seront des arguments de mot-clé uniquement.
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)
Comme je vous l'ai dit dans les commentaires, il semble qu'il y ait aussi des arguments de position uniquement. 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
Quand j'ai été signalé par d'autres personnes, j'ai pensé que c'était peut-être une bonne étude parce que c'était embarrassant.
Recommended Posts