Aller au contenu

06 Cours Fonctions

Introduction⚓︎

Les fonctions permettent de réutiliser des blocs de code dans des endroits différents sans avoir à copier ce bloc. Un programme peut ainsi être décomposé en plusieurs modules indépendants les uns des autres. Ce qui peut être très utile dans le cadre d’un travail en équipe.

Dans certains langages, on distingue les procédures qui exécutent des instructions sans renvoyer de valeur, et les fonctions qui retournent une valeur. En Python, les procédures sont gérées par les objets de type fonctions, avec ou sans valeur de retour.

🐍 Script Python
def <nom fonction>(param1, param2, ...):
    <bloc d instructions>
    return <valeur>  # instruction optionnelle

On distingue :

  • les fonctions qui renvoient un résultat, une sortie (avec return), des fonctions sans résultat (sans return)
  • les fonctions sans paramètres (pour lesquelles () est vide) des fonctions avec paramètres (param1, param2, ...)

<nom fonction>(param1, param2, ...) est appelé signature de la fonction.

Procédures = Fonctions sans sortie / sans résultat⚓︎

Fonctions sans sortie et sans paramètre⚓︎

Définir une fonction⚓︎

🐍 Script Python
def func1():  # définition de la fonction
    print('You know what?')
    print("I'm happy!")

On peut également écrire return à la fin de la fonction, mais s'il n'y a rien derrière le return, elle ne renvoie rien, elle n'a pas de sortie.

🐍 Script Python
def func1():  # définition de la fonction
    print('You know what?')
    print("I'm happy!")
    return

Appeler une fonction : utiliser une fonction que l’on a définie⚓︎

🐍 Script Python
# Pour appeler la fonction, et lancer son exécution, on l'appelle, avec ses parenthèses :
func1()  # premier appel de la fonction
📋 Texte
You know what?
I'm happy!
🐍 Script Python
func1()  # deuxième appel
📋 Texte
You know what?
I'm happy!
🐍 Script Python
# En revanche, elle ne retourne rien, il n'y a pas de valeur de retour (pas de sortie) :
print("3e appel :")
x = func1()
print(x)
📋 Texte
3e appel :
You know what?
I'm happy!
None     # si on affiche la valeur d'une procédure (qui n'a pas de return), on obtient None

Fonctions sans sortie, avec paramètres⚓︎

Pour définir une fonction qui prend des paramètres, on nomme ces paramètres entre les parenthèses de la ligne def. Ces paramètres seront définis comme des variables à l’intérieur de la fonction et recevront les valeurs passées lors des appels de celle-ci.

🐍 Script Python
def func2(nom):
    print("Bonjour " + nom)

Pour utiliser cette fonction avec diverses valeurs, il suffit de l’appeler en précisant dans les parenthèses la valeur du paramètre à utiliser :

🐍 Script Python
func2("mesdames")
func2("messieurs")
📋 Texte
Bonjour mesdames
Bonjour messieurs

Fonctions avec sortie / avec return⚓︎

Les fonctions utilisant return "retournent" (= "renvoient") une valeur. Ce sont les fonctions qui ressemblent le plus aux fonctions mathématiques.
On peut afficher la valeur de retour, ou la sauvegarder dans une variable, ou l'utiliser dans un calcul...

Fonction sans paramètre⚓︎

🐍 Script Python
def func3():  # définition de la fonction
    return "I'm happy"  # cette fonction retourne une chaine de caractère

print("Premier appel : ")
func3()  # premier appel de la fonction : la valeur retournée n'est pas utilisée
📋 Texte
Premier appel :

Il faut utiliser la valeur de retour de la fonction :

🐍 Script Python
print("Deuxième appel : ")
y = func3()  # le retour du deuxième appel est stocké dans une variable
print(f"\tLa fonction func3() nous a renvoyé la valeur : {y}")
📋 Texte
Deuxième appel :
    La fonction func3() nous a renvoyé la valeur : I'm happy

Fonction avec paramètres⚓︎

Pour définir une fonction qui prend des paramètres, on nomme ces paramètres entre les parenthèses de la ligne def. Ces paramètres seront définis comme des variables à l’intérieur de la fonction et recevront les valeurs passées lors des appels de celle-ci.

🐍 Script Python
def somme(x, y):
    return x + y

Pour utiliser cette fonction avec diverses valeurs, il suffit de l’appeler en donnant les valeurs de chaque paramètre :

🐍 Script Python
print(somme(1, 2))  # affiche 3
print(somme(4, 7))  # affiche 11
print(somme(2 + 2, 7))  # affiche 11
print(somme(somme(2, 2), 7))  # affiche 11

Premiers tests⚓︎

Pour vérifier à l'écran les résultats de vos fonctions, vous pouvez les appeler avec print().

Mais pour tester plus automatiquement, on peut utiliser des assertions : on utilise le mot clé assert qui signifie en substance "assure-toi que la condition est vraie, sinon, arrête le programme et envoie un message erreur adapté".

On peut utiliser assert pour tester certaines valeurs de retours de la fonction et vérifier qu'elles suivent des condtitions, ou qu'elles valent certaines valeurs attendues.

Par exemple, avec notre exemple précédent somme(x, y) :

🐍 Script Python
assert somme(0, 10) == 10
assert somme(-6, 14) == 8
assert somme(-6, 6) == 0
# mais attention aux égalités de flottants !!
assert somme(0.01, 0.02) == 0.03

Lorsque les tests sont réussis, aucun message n'est envoyé, rien ne s'affiche. Mais si un test échoue, tout s'arrête, et cela produit une erreur.
Inconvénient : dès qu'un test échoue, tout s'arrête. Cela ne permet pas de lancer plusieurs tests en même temps.

On peut noter un message erreur personnalité après une virgule :

🐍 Script Python
assert somme(0, 10) == 10, "erreur dans la somme de 0 et 10"

Fonctions natives⚓︎

Dans Python, de nombreuses fonctions sont déjà définies. Ces fonctions sont disponibles dans tous les contextes. La liste complète est détaillée ici. En voici une sélection :

  • dir(obj) : retourne une liste des toutes les méthodes et attribut de l’objet obj
  • dir() : retourne une liste de tous les objets du contexte courant
  • eval(expr) : analyse et exécute la chaîne de caractère expr
🐍 Script Python
a = 1
b = eval('a + 1')
print(f"b est de type {type(b)} et vaut {b}")
📋 Texte
b est de type <class 'int'> et vaut 2
  • globals() : retourne un dictionnaire des variables présentes dans le contexte global

  • locals() : comme globals() mais avec le contexte local

  • help(obj) : affiche l’aide au sujet d’un objet

  • help() : affiche l’aide générale (s’appelle depuis l’interpréteur interactif)

  • input(prompt) : retourne une chaîne de caractère lue dans la console après le message prompt

🐍 Script Python
reponse = input('Ca va ? ')
if reponse.lower() in ('o', 'oui', 'yes', 'y', 'ok', 'da', 'jawohl', 'ja'):
    print('Supercalifragilisticexpialidocious')
else:
    print('Faut prendre des vacances...')
  • len(seq) : retourne la longueur de la séquence seq

  • max(seq) : retourne le maximum de la séquence seq

  • min(seq) : retourne le minimum de la séquence seq

  • range([start=0], stop[, step=1]) : retourne un itérateur d’entiers allant de start à stop - 1, par pas de step.

🐍 Script Python
print(list(range(10)))
print(list(range(5, 10, 2)))
📋 Texte
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 7, 9]
  • repr(obj): affiche la représentation de l’objet obj.
  • reversed(seq) : retourne l’inverse de la séquence seq
  • sorted(seq) : retourne une séquence triée à partir de la séquence seq
  • sum(seq) : retourne la somme des éléments de la séquence seq