Fonctions - À vous

Définition d'une fonction

🐍 Script Python
def prix(nbre_adultes, nbre_enfants):  # Remarque 1              
    resultat = 37 * nbre_adultes + 28 * nbre_enfants  
    return resultat  # Remarque 2

prix(3, 2)  # Remarque 3                                
  • Remarque 1 : Une fonction commence par le mot clef \(\hspace{2em}\) , suivie du \(\hspace{5em}\) de la fonction, puis entre parenthèse, les \(\hspace{5em}\) de la fonction.

  • Remarque 2 : return signifie \(\hspace{5em}\) , c'est cette ligne qui indique ce que va \(\hspace{10em}\) la fonction. Ici elle \(\hspace{5em}\) resultat, donc elle \(\hspace{5em}\) la valeur de la variable resultat

  • Remarque 3 : Cette ligne de code ne fait pas partie de la fonction (Elle n'est pas dans le bloc indenté). Les lignes de codes qui ne sont pas dans une fonction font partie de ce qu'on appelle le programme principal.
    Une fois qu'une fonction est définie, il est possible de l'appeler (l'utiliser) dans le programme principal, mais aussi dans une autre fonction.

Utiliser le résultat renvoyé par une fonction

Toutefois, l'appel ci-dessus ne fait qu'appeler la fonction, qui renvoie le résultat. Ceci ne sera pas utile si nous ne conservons pas ce résultat (afin de pouvoir l'utiliser dans la suite du programme). Pour cela nous allons en général affecter ce résultat à une variable :

🐍 Script Python
prix_a_payer = prix(3, 2)
print("le prix à payer : ", prix_a_payer) 

Si on veut seulement afficher le résultat, on peut directement afficher ainsi :

🐍 Script Python
print("le prix à payer : ", prix(3, 2)) 

Arguments de la fonction

Quand on « appelle » prix(3, 2) :
• 3 est automatiquement \(\hspace{5em}\) au 1er \(\hspace{5em}\) : la variable nbre_adultes
• 2 est automatiquement \(\hspace{5em}\) au second \(\hspace{5em}\) : la variable nbre_enfants

3 et 2 sont les valeurs données en arguments.

Remarque 1 :⚓︎

Une fonction sans paramètres

Certaines fonctions n'ont aucun paramètre. Dans ce cas, on met des parenthèses vides aussi bien dans la définition que dans l'appel de la fonction :

🐍 Script Python
def ma_fonction() :
    instruction du bloc

ma_variable  = ma_fonction()

Remarque 2 :⚓︎

Des fonctions qui ne renvoient rien

Certaines fonctions ne renvoient rien.

Exemple :

🐍 Script Python
def ma_fonction(nom) :
    print("Votre nom est :",nom)
    return None # ou simplement return, ou pas de return du tout ...

ma_fonction()
Cette fonction ne renvoie rien

De telles fonctions sont, dans certains langages, appelées des procédures. En python, on ne fait pas de différence. Une procédure fait quelques chose : ici par exemple, elle sert à afficher (dans la console) un message.

Notez que dans l'appel d'une procédure, on n'affecte pas le résultat à une variable. C'est logique car il n'y a pas de résultat, puisque la fonction ne renvoie rien.

Notion d'espace de noms⚓︎

Définitions ❤

  • Les variables définies dans le corps d'une fonction sont appelées ...
  • Les variables définies dans le corps du programme (sous-entendu : pas à l'intérieur d'une fonction) sont appelées ...

Règles d'accès aux variables locales et globales ❤

  • règle 1 : une variable locale (définie \(\hspace{8em}\) d'une fonction) est \(\hspace{6em}\) hors de cette fonction.
  • règle 2 : une variable globale (définie à \(\hspace{8em}\) d'une fonction) est \(\hspace{6em}\) en lecture à l'intérieur d'une fonction.
  • règle 3 : une variable globale (définie à \(\hspace{8em}\) d'une fonction) ne peut pas être modifiée à l'intérieur d'une fonction.

global_regles.png

Source : Gilles Lassus

Testez vos fonctions

Exemple d'utilisation pour une fonction carre qui élève au carré:

🐍 Script Python
    assert carre(3) == 9, "l'appel carre(3) devrait renvoyer 9"

Si le test est réussi, il ne se passera rien, sinon le code lève une exception AssertionError et affiche le message.

👉 Remarque : souvent nous n'écrirons pas de message explicatif. Nous nous contenterons par exemple de :

🐍 Script Python
    assert carre(3) == 9

Dans ce cas-là, si le test est réussi, il ne se passera rien, sinon le code lève une exception AssertionError et n'affiche pas de message.

Une fonction peut appeler une autre fonction

Toutes nos fonctions (que nous écrivons ou que nous importons) sont définies avant toute exécution du programme. De sorte que, lorsque l'exécution du code commence, elles sont toutes reconnues et utilisables en tout point du code, y compris dans d'autres fonctions.