Fonctions en python

Définition, utilisation et autre…




Une fonction est une structure qui contient un ensemble d'instructions. Un simple appel à la fonction, à chaque fois que souhaité permet de (re)lancer toutes ses instructions.
Une fonction peut accepter des arguments, ou variables, en entrée, et de même en renvoyer ou non en sortie.

Définition d'une fonction

Syntaxe générale

En python, la définition se fait via le mot clé def:
def nom_fonction(arg1,arg2,…):
    instruction 1
    instruction 2
    …
L'indentation définit, comme partout en python, le corps de la fonction. Par exemple,
def AfficheOK():
    print("OK, tout va bien")
définit une fonction dont le nom est AfficheOK, qui n'accepte pas d'argument en entrée et qui, une fois appelée, affiche le texte "OK, tout va bien".
Cette fonction ne renvoyant aucune valeur s'appelle aussi dans la terminologie de la programmation une routine.
Cette fonction s'utilise simplement en l'appelant grâce à son nom, à chaque fois que souhaité, après sa défintion.
AfficheOK()
qui affiche donc OK, ….
Les parenthèses sont obligatoires lors de l'appel de la fonction, même si elles sont vides, comme ici, en l'abscence d'arguments.

Argument d'entrée

On peut définir des fonctions qui dépendent, donc agissent différemment selon, de paramètres. Par exemple,
def AfficheOK(txt):
    print("OK, tout va ",txt)
s'utilise suivant
AfficheOK("bien")
# affiche: OK, tout va bien
AfficheOK("mal")
# affiche: OK, tout va mal
AfficheOK(3)
# affiche: OK, tout va 3
Par contre maintenant l'appel de la fonction sans argument renvoie une erreur:
AfficheOK()
#TypeError: AfficheOK() takes exactly 1 argument (0 given)
qui nous rappelle ce que l'on sait ici déjà…
Voir un peu plus loin pour la définition et l'utilisation de fonctions avec des valeurs par défaut.

Argument de sortie

On peut bien sûr demander aussi à une fonction de nous renvoyer le résultat de calculs, par exemple
def f(x):
    y=3*x*x-5
    return y
définit une fonction f qui prend un argument x en entrée, effectue un calcul à partir de celui-ci, puis renvoie le résultat de ce calcul.
print(f(3))
# affiche: 7
y=f(5)
print(y)
# affiche: 70
y=f(-2)
z=2*y+3
print(z)
# affiche: 17
Une telle fonction, avec exactement un argument numérique en entrée et qui renvoie une valeur numérique en sortie, est une fonction mathématique telle que définie et vue au lycée.

On n'est pas limité aux valeurs numériques, et on peut utiliser toutes les opérations et structures permises par python dans le corps d'une fonction. Par exemple, en reprenant la fonction AfficheOK() précédente, on peut faire un traitement conditionnel suivant l'argument d'entrée
def AfficheOK(txt):
    if(txt=="bien"):
        y="OK, tout va bien"
    elif(txt=="mal"):
        y="Mal, tout va mal"
    else:
        y="Bof, c'est pas clair"
    return y

y=AfficheOK("bien")
print(y)
# affiche: OK, tout va bien
y=AfficheOK("mal")
print(y)
# affiche: Mal, tout va mal
y=AfficheOK(3)
print(y)
# affiche: Bof, c'est pas clair
On sort bien sûr là des fonctions mathématiques numériques du lycée.

Fonction avec plusieurs argument

On peut définir des fonctions qui acceptent plusieurs argument en entrée, par exemple
def f(x,y):
    z=x*y
    return z

z=f(2,3)
# z vaut maintenant 6
Ces multiples arguments ne sont d'ailleurs pas forcément du même type:
def AfficheOK(a,txt):
    print(a*txt)

AfficheOK(3,"zut ")
    # Affiche: zut, zut, zut

De même en sortie, une fonction peut renvoyer plusieurs valeurs
def f(x,y):
    z=2*x+y
    w=-x-y
    return z, w

print(f(1,2)) # affiche: (4,-3)
z,w=f(2,3) # donc z=7 et w=-5
print(z,w,z+w) # affiche: 7 -5 2

Exercices et QCM