Passage de paramètres par nom

Commençons avec une fonction "classique" :

In [3]:
def f(x, y):
    print "x =", x
    print "y =", y

On peut l'appeler "comme d'habitude", on dit qu'on passe les paramètres par position (premier paramètre, deuxième paramètre, ...) :

In [4]:
f(12, 42)
x = 12
y = 42

On peut aussi passer les paramètres en spécifiant explicitement leur nom (passage par nom) :

In [5]:
f(x=333, y=321)
x = 333
y = 321

Du coup, l'odre n'a plus d'importance, on peut passer y avant x :

In [6]:
f(y=123, x=456)
x = 456
y = 123

Bien sûr, si on oublie un paramètre, Python n'est pas content :

In [7]:
f(y=123)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-cebd65a64209> in <module>()
----> 1 f(y=123)

TypeError: f() takes exactly 2 arguments (1 given)

Par contre, les fonctions peuvent avoir des paramètres optionnels s'ils ont une valeur par défaut. Par exemple, g fait la même chose que f mais accepte qu'on omette un paramètre : ce paramètre aura la valeur 0 :

In [8]:
def g(x=0, y=0):
    print "x =", x
    print "y =", y

Voyons comment g se comporte :

In [9]:
g()
x = 0
y = 0
In [10]:
g(y=42)
x = 0
y = 42
In [11]:
g(x=12)
x = 12
y = 0
In [12]:
g(1, 2)
x = 1
y = 2
In [13]:
g(1)
x = 1
y = 0
In [ ]: