En python il est possible de construire des fonctions qui acceptent un nombre indéfini de paramètres, aussi bien en positionnel qu’en nommé.
*args
def mafonction(*args):
for a in args:
print(a)
mafonction(1)
# 1
mafonction(1,2,3)
# 1
# 2
# 3
le *args est interprété comme un tuple
**kwargs
def mafonction(param,*args,**kwargs):
for a in kwargs:
print(a,kwargs[a])
mafonction(nom="Dupont",age=27)
#nom Dupont
#age 27
Notez qu’il n’est pas nécessaire de les appeler *args et **kwargs, on peut utiliser d’autres noms.
On peut mixer ces deux types de paramètre avec des paramètres classiques
def mafonction(param1,*args,**kwargs):
Unpack argument list
Cette technique consiste à préfixer le paramètre d’un astérisque, pas lors de la déclaration de la fonction, mais lors de l’appel de la fonction.
def mafonction(a,b,c):
print(a,b,c)
obj = {"nom":"Dupont","age":27}
mafonction(100,**obj)
# 100,Dupont 27
def mafonction(a,b):
print(a,b)
l = [1,2]
mafonction(*l)
# 1 2
Pour les listes et tuple on utilisera *args, pour les dictionnaire on utilisera **
mylist = [1,2,3]
>>> foo(*mylist)
x=1
y=2
z=3
>>> mydict = {'x':1,'y':2,'z':3}
>>> foo(**mydict)
x=1
y=2
z=3
>>> mytuple = (1, 2, 3)
>>> foo(*mytuple)
x=1
y=2
z=3
Extended iterable unpacking
Une façon de faire de l’unpacking puissante
first, *rest = [1,2,3,4] first,*l,last = [1,2,3,4]
Enfin un esyntaxe propre à Python 3 :
def mafonction(arg1,arg2,*,kwarg1,kwarg2):
pass
La syntaxe ci-dessus impose que les deux premiers paramètres soient positionnel, et les paramètre après l’astérisque soient nommés.