Logo de Python

6: Les fonctions

1 : Introduction aux fonctions

1.1 : Qu’est-ce qu’une fonction

Pour ne pas rentrer dans les détails, une fonction est un petit morceau de code qui permet d’effectuer une action spécifique plusieurs fois de suite sans avoir à copier-coller le code, comme print() par exemple (copier-coller plusieurs fois une portion de code est extrêmement grossier en programmation).

1.2 : Comment marche une fonction ?

Lorsqu’on utilise une fonction, l’interpréteur se rend dans la définition de la fonction (le lieu où le comportement de la fonction et ses actions sont définis). Par exemple, la définition des fonctions print() et input() se trouve dans la librairie “os”. C’est pour cela qu’il est nécessaire d’importer cette lib au début du programme. Une fonction peut également prendre des arguments. Pour print(), l’argument est la valeur à afficher. On écrit cette valeur entre parenthèses :

print("Hello World!") #Affiche : Hello World!

print(text_value) #Affiche la valeur de text_value

Pour passer plusieurs arguments à une fonction, on les sépare par une virgule :

randrange(1, 6)  #Fonction générant un nombre aléatoire compris entre 1 et 5

Une fonction peut également retourner une valeur. La fonction input() retourne la valeur saisie par l’utilisateur du programme. On peut ensuite initialiser une variable avec la valeur retournée d’une fonction :

name = input("Saisissez votre prenom : ") # name sera égal au prénom saisi

valeur = int(input("Valeur a multiplier par deux"))*2 # valeur sera égal à la valeur retournée par input() (Donc la valeur saisie)

2 : Créer une fonction

2.1 : Définir et utiliser sa fonction

Après avoir compris à quoi sert une fonction, il n’est pas bien difficile d’en créer. Voici un exemple simpliste comptant jusqu’à 10 à l’aide d’une boucle while :

def compteur():
    valeur = 0
    while(valeur < 10):
        print(valeur)

Dans cet exemple, nous pouvons noter plusieurs choses : Premièrement, les parenthèse sont indispensables, elles déclarent à l’interpréteur que c’est une fonction que vous créez. De plus, on utilise le mot-clé def pour créer une fonction. Par la suite, après une tabulation montrant que nous rentrons dans le corps de la fonction, nous créons une variable qui servira de compteur dans la fonction. Puis par la suite, nous créons une boucle while qui se répète tant que la variable ‘valeur’ est plus petite que 10. A chaque tour de boucle, on écrit la valeur de ‘valeur’ et y ajoute 1. On doit également noter qu’en rentrant dans la boucle while, on ajoute une autre tabulation, car nous rentrons dans un “autre niveau” du code.

Attention : Comme pour if, une fonction est un bloc de code : il ne faut donc pas oublier la tabulation ou les ‘:’

A présent, pour utiliser la fonction, on écrira :

compteur()

Automatiquement, l’interpréteur vous listera toutes les valeurs jusqu’à 10.

2.2 : La portée des variables

Très vite, avec ce que l’on sait actuellement, on se rend compte que répéter plusieurs fois une fonction écrivant toujours la même chose est bien inutile. Il nous faut un moyen d’interagir avec cette fonction. On commence donc à écrire ceci :

def compteur():
    valeur = 0
    while(valeur &lt; 10):
        print(valeur)

valeur = 5

Cependant, cela ne fonctionnera pas. Mais pourquoi ? Pour une raison extrêmement simple : les variables créés dans une fonction ne peuvent pas être utilisée dans une autre. Par exemple, on ne peut pas faire ça :

def fonctionA():
    variableLocale = 0 # Définition d'une variable dans une fonction

def fonctionB():
    print(variableLocale) # ERREUR : On ne peut pas utiliser une variable créé dans une fonction à l'intérieur d'une autre.

print(variableLocale) # ERREUR : On ne peut pas non plus utiliser de variable créé dans une fonction dans le corps principal

Mais alors, il n’est pas possible d’interagir avec une fonction depuis l’extérieur de son corps. Eh bien si, cela est parfaitement possible, grâce aux arguments et aux valeurs de retour.

2.3 : Les arguments

Un argument est, de manière simplifiée, une variable dont on peut définir la valeur depuis l’extérieur de la fonction. Par exemple :

def carre(valeur_en_arg):
    print(valeur_en_arg * valeur_en_arg)

Cette fonction affiche le carré de la valeur passée en argument, ‘valeur_en_arg’ étant la variable argument ; ‘valeur_en_arg’ est initialisée avec une valeur écrite entre les parenthèses. Par exemple, le code suivant défini que la variable ‘valeur_en_arg’ est égale à cinq :

carre(5)

On passe la valeur 5 en argument, cela signifie que la variable ‘valeur_en_arg’ sera égale à 5. Ensuite, vous pouvez utiliser votre fonction autant de fois que vous le souhaitez, en changeant la valeur passée en argument :

carre(5) # Affiche 25
carre(3) # Affiche 9

2.4 : Les valeurs de retour

Vous pouvez également faire “sortir” une valeur de la fonction, à l’inverse de l’argument. Pour cela, on utilise l’instruction return :

# Création d'une fonction nommée carré prenant un argument nommé arg
def carré(arg): 
    return arg * arg

Ici, on retourne le carré de la valeur en argument, et on peut donc utiliser la valeur du carré en dehors de la fonction. Voici un exemple d’utilisation :

variable = carré(5) # variable sera égale à 25

Pour conclure, voici un simple schéma résumant le mécanisme de fonction :