Voici une astuce qui pourra sans doute servir à plusieurs d’entre vous : je vais vous parler des fonctions Python qui peuvent admettre un nombre variable d’arguments.
Une fonction peut quelques fois devoir prendre un nombre variable d’arguments. Par exemple, si l’on souhaite calculer le PGCD de plusieurs nombres, on aimerait que la fonction PGCD (par exemple) accepte 2, 3, 4, … arguments.
Calcul du PGCD de plusieurs nombres
Voici sur un exemple comment faire:
def pgcd(*n): def _pgcd(a,b): while b!=0: a,b = b,a%b return a p = _pgcd(n[0],n[1]) for x in n[2:]: p = _pgcd(p,x) return p print(pgcd(165,515,225,65))
Cette méthode s’appelle l’unpacking. Regardons à travers un deuxième exemple.
Somme de plusieurs nombres
On va définir ici une fonction “somme”:
def somme(*n): return sum(s)
Cette fonction permet de calculer la somme d’un nombre variable d’arguments. Par exemple:
somme(1,2,3,4,5)
retourne $$1+2+3+4+5=15.$$Et:
somme(15,12,2,20,12,1,2)
retourne:$$15+12+2+20+12+1+2=64.$$
- 1 splat (1 étoile) : liste
- 2 splats (2 étoiles) : dictionnaire
En effet, si l’on souhaite récupérer les arguments dans un dictionnaire, on utilise le double splat.
Un exemple basique avec double splat
def fonction(**kwargs): for key,value in kwargs.items(): print('{} -> {}'.format(key,value)) fonction(a = 1, b = 2, c = 5)
a -> 1 b -> 2 c -> 5
À travers cet exemple, on voit bien le fonctionnement de l’unpacking avec le double splat. Il est à noter qu’en général, on note kwargs pour le double splat (contraction de “keyword arguments”), mais ce n’est pas obligatoire.
On peut aussi mélanger le splat et le double splat.
Mélange de splat et double splat
def fonction(*args , **kwargs): for i in args: print(i) for key,value in kwargs.items(): print('{} -> {}'.format(key,value)) fonction(48 , 52 , 63 , a = 1, b = 2, c = 5)
48 52 63 a -> 1 b -> 2 c -> 5