Les variables, que nous avons vues dans la leçon précédente, sont particulièrement utiles dans les définitions de fonctions. Vous vous rappelez de notre fonction print2 ?
>>> def print2():
... print 2
...
>>> print2()
2
Nous pouvons la rendre plus générale comme ceci :
>>> def print_nombre(n):
... print n
...
>>> print_nombre(2)
2
>>> print_nombre(78)
78
En écrivant une variable en tant que paramètre (ou argument) entre les deux parenthèses quand nous définisssons la fonction, nous disons à Python que, quelle que soit la valeur que nous utilisons quand nous appelons la fonction elle doit être affectée à la variable (n dans ce cas).
Supposons que nous voulions afficher à la fois des nombres et des chaînes de caractères, c'est-à-dire que nous voulions que la sortie de la fonction print_nombre() soit quelque chose comme :
Le nombre que vous avez choisi est 2.
Il y a plusieurs façons de le faire comme vous le verrez plus tard. Voici une manière qui n'est pas évidente, mais qui est très utile à connaître.
>>> def print_nombre(n):
.... print "Le nombre que vous avez choisi est %s." % n
....
>>> print_nombre(3)
Le nombre que vous avez choisi est 3.
Python remplace la combinaison %s qui est dans la chaîne de caractère par la valeur de la variable qui suit le % après la chaîne. Essayez le vous même, et continuez à lire.
Revenons à notre fonction plus_grand() et rendons la plus
générale.
Voici comment nous pouvons le faire :
>>> def plus_grand(premier, second):
... if premier > second:
... print "%s est plus grand que %s" % (premier, second)
... else:
... print "%s est plus grand que %s" % (second, premier)
...
>>> plus_grand(5, 4)
5 est plus grand que 4
>>> plus_grand(0, 10)
10 est plus grand que 0
Notez que nous devons mettre des parenthèses () autour des deux variables qui suivent le signe pour-cent % pour que Python sache que nous voulons qu'elles remplacent les deux %s qui sont dans la chaîne de caractères.
Essayez !
Remarque : Vous avez essayé et testé la fonction avec plusieurs valeurs ? Vous avez dû remarqué que votre programme avait un petit défaut, non ? Quand vous programmez, attention aux cas particuliers :
>>> plus_grand(10, 10)
10 est plus grand que 10
Vous voyez ce que je veux dire maintenant ? J'ai fait exprès
d'oublier le cas où les deux nombres sont égaux pour simplifier, mais
maintenant, c'est à vous de corriger cet oubli. Vous pourrez utiliser
le mot-clé elif
pour cela (vous ne l'avez pas oublié, j'espère ? sinon revenez en
arrière de quelques leçons). Vous verrez la solution dans la suite mais
comme d'habitude, essayez d'abord !
Nous venons de voir comment, en utilisant des variables, nous pouvons rendre notre fonction plus_grand() plus générale qu'avant, quand elle pouvait seulement comparer les deux mêmes valeurs. Maintenant, telle qu'elle est écrite, elle a toujours besoin de deux paramètres : les deux nombres à comparer. Supposons que nous voulions que Python décide si certains nombres sont plus grands que la valeur particulière 0 (zéro). Nous pourrions écrire une autre fonction pour le faire... ou nous pourrions modifier légèrement notre fonction existante comme suit :
>>> def plus_grand(premier, second=0):
... if premier > second:
... print "%s est plus grand que %s" % (premier, second)
... elif premier < second:
... print "%s est plus grand que %s" % (second, premier)
... else:
... print "%s est égal à lui-même !" % premier
...
>>> plus_grand(5, 4)
5 est plus grand que 4
>>> plus_grand(1, 10)
10 est plus grand que 1
plus_grand(5)
>>> 5 est plus grand que 0
plus_grand(-2)
>>> 0 est plus grand que -2
En écrivant "second=0" entre les parenthèses dans la définition de la fonction, nous demandons à Python d'utiliser cette valeur pour la deuxième variable si nous appelons la fonction avec seulement un paramètre. Quand nous donnons une valeur par défaut comme cela à un paramètre, nous appelons cela un paramètre nommé.
Les paramètres nommés (il peut y en avoir plus d'un) doivent toujours apparaître après les paramètres non nommés. Par conséquent, les définitions suivantes [seule la première ligne est montrée ci-dessous] seraient permises :
>>> def quatre_parametres(a, b, c, d=33):
>>> def quatre_parametres(a, b, c=7, d=2):
>>> def quatre_parametres(a, b=1, c=3, d=56):
>>> def quatre_parametres(a=4, b=1, c=3, d=0):
mais les définitions suivantes ne seraient pas autorisées :
>>> def quatre_parametres(a=1, b, c, d=33):
>>> def quatre_parametres(a, b=2, c=3, d):
>>> def quatre_parametres(a=5, b=1, c=3, d):
Essayez les tout en écrivant vos propres définitions de fonctions.
Python ne vous permet pas d'utiliser l'un de ses mots-clés comme une variable. Essayez ce qui suit :
>>> def = 2
et voyez ce que vous obtenez !