Maison >développement back-end >Tutoriel Python >Comment fonctionnent *args et kwargs dans les définitions et les appels de fonctions Python ?
En Python, le * (double étoile/astérisque) et (étoile /astérisque) dans les définitions de fonctions et les appels jouent un rôle crucial dans la gestion des variables arguments.
La syntaxe
def foo(x, y, **kwargs): pass
indique que la fonction foo peut accepter un nombre arbitraire d'arguments de mots-clés. Ces arguments de mots-clés sont regroupés dans un dictionnaire nommé kwargs. Par exemple :
def bar(**kwargs): for a in kwargs: print(a, kwargs[a]) # Call the function bar(name='one', age=27) # Output: # name one # age 27
De même, la syntaxe
def foo(x, y, *args): pass
permet à la fonction foo d'accepter un nombre arbitraire d'arguments de position. Ces arguments sont rassemblés dans un tuple nommé args.
def foo(*args): for a in args: print(a) # Call the function foo(1) # Output: 1 foo(1, 2, 3) # Output: 1 # Output: 2 # Output: 3
Les deux *kwargs et args peuvent être utilisés ensemble pour autoriser les arguments fixes et variables. Par exemple :
def foo(kind, *args, bar=None, **kwargs): print(kind, args, bar, kwargs) # Call the function foo(123, 'a', 'b', apple='red') # Output: 123 ('a', 'b') None {'apple': 'red'}
La notation * peut également être utilisée pour décompresser les listes d'arguments lors de l'appel de fonctions. Par exemple :
def foo(bar, lee): print(bar, lee) # Create a list baz = [1, 2] # Call the function using unpacking foo(*baz) # Output: 1 2
Dans Python 3.8 et versions ultérieures, il est possible de spécifier des paramètres de position uniquement dans une définition de fonction en utilisant le * notation avant les paramètres réguliers :
def func(arg1, arg2, arg3, *, kwarg1, kwarg2): pass
Cette fonction ne peut accepter que trois arguments de position, et tout argument supplémentaire doit être passé comme arguments de mots-clés.
Dans Python 3.6 et versions ultérieures, l'ordre des arguments de mots-clés est conservé dans le dictionnaire kwargs. Cela peut être utile dans certains scénarios, par exemple lorsque vous devez conserver l'ordre des arguments transmis à la fonction.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!