https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8
Si vous regardez de près le code Python
def f(*args, **kwargs):
pass
ʻArgs avec * mark` Et je vois des kwargs marqués par **.
Qu'est-ce que c'est? ??
Que signifient args et kwargs?
En anglais, l'argument s'appelle «argument», et s'il y a plusieurs arguments, ce sont naturellement des arguments. Python est une notation souvent abrégée
--args = abréviation des arguments taple de longueur variable --kwargs = abréviation des arguments de mots-clés Dictionnaire de mots-clés
Cela signifie que.
*args
* args
est une notation qui vous permet de recevoir le ** argument supplémentaire non spécifié par mot-clé ** passé par la fonction en un seul clic.
Par exemple, considérons la fonction Accumulate, qui ajoute et renvoie un certain nombre d'entiers donnés:
def accumulate(*args):
print(args)
return sum(args)
'''
(10, 20, 30, 40)
100
'''
print(accumulate(10, 20, 30, 40))
Puisqu'il y a de nombreux arguments donnés à accumuler, ils sont stockés sous forme de taples dans * args
.
En préparant un argument avec un "astérisque" comme "* args" de cette manière, vous pouvez recevoir le reste de l'argument sans spécification de mot-clé.
De plus, les itérables tapple et list peuvent être ** décompressés ** en réappliquant des "astérisques".
def accumulate(*args):
print(*args)
return sum(args)
'''
10 20 30 40
100
'''
print(accumulate(10, 20, 30, 40))
Par conséquent, vous pouvez utiliser cette décompression pour la transmettre à d'autres fonctions autant de fois que vous le souhaitez.
def accumulate(*args):
return sum(args)
def some_calc(*args):
#Déballez et passez pour accumuler
return accumulate(*args)
print(some_calc(10, 20, 30, 40))
**args
** args
est un argument de spécification de mot-clé qui reçoit ** des dictionnaires avec d'autres arguments qui ne s'appliquent pas **.
def f(x, y, **kwargs):
print(x)
print(y)
print(kwargs)
'''
10
20
{'a': 20, 'b': 'hello'}
'''
f(x=10, y=20, a=20, b="hello")
Dans ce qui précède, x et y y circulent car ils existent déjà dans l'argument de la fonction f, mais malheureusement, kwargs gâche a et b sans destinataires.
Le dictionnaire peut également être décompressé.
Si vous n'utilisez qu'un seul "astérisque", vous ne pouvez récupérer que la clé. Et si vous en utilisez deux, cela ressemblera à a = 20, b = "bonjour".
def f(x, y, **kwargs):
print(x)
print(y)
print(*kwargs)
#print(**kwargs)
'''
10
20
a b
'''
f(x=10, y=20, a=20, b="hello")
Malheureusement, print (** kwargs)
ne fonctionne pas. J'obtiens une erreur.
Pour imprimer en Python
C'est parce que la notation print (a = 20, b =" bonjour ")
n'est pas fournie.
* args
, ** kwargs
est une notation qui ne peut être faite que dans un langage dynamique,
Ceci est souvent utilisé dans les packages Python tels que def init.
Cela vous permet de recevoir des paramètres donnés par l'utilisateur dans un dictionnaire ou un taple, permettant de nombreux comportements.
Lorsqu'il est utilisé avec des vars, il peut effectuer des comportements très utiles. J'aborderai cela dans un autre article.
Recommended Posts