Python et fonction à nombre variable d’arguments

  • Dernière modification de la publication :30 juin 2022
  • Temps de lecture :4 min de lecture
  • Commentaires de la publication :0 commentaire

Loading

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.

fonction Python à un nombre variable d'arguments
fonction Python à 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
5 2 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires