[Road to Intermediate] Que sont les * args, ** kwargs de Python?

Lien vers le résumé

https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8

introduction

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 signifie-t-il en premier lieu?

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.

finalement

* 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

[Road to Intermediate] Que sont les * args, ** kwargs de Python?
[Road to Intermediate] Utiliser les variables de fonction intégrées de Python
Road to Intermediate Linux: Network Edition
[Road to Intermediate] Comprendre les propriétés Python
[Route vers Python intermédiaire] Utiliser des opérateurs ternaires
[Route vers Python intermédiaire] Utiliser des expressions lambda
[Route vers Python intermédiaire] Résumé du lien de l'article
[Road to Intermediate] Python semble être tous des objets
Que sont les taples et * args python après tout?
[Route vers Python intermédiaire] Définir la fonction __getattr__ dans la classe
[Road to Intermediate Python] Définissez dans votre propre classe