Pendant cette leçon nous allons découvrir ce qu'est une fonction avec Python et comment en créer. Les fonctions seront l'un de nos principaux blocs de construction lorsque nous allons développer de plus en plus de code pour résoudre des problèmes.
Qu'est-ce qu'une fonction ?
De façon très formelle, une fonction est un moyen très utile de regrouper un ensemble d'instructions afin qu'elles puissent être exécutées plus d'une fois. Elles permettent également de spécifier des paramètres qui peuvent servir comme variables d'entrées aux fonctions.
Sur un plan plus pratique, les fonctions permettent de ne pas avoir à écrire à plusieurs reprises le même code encore et encore. Si vous vous souvenez des leçons sur les chaines et les listes, vous devriez vous rappeler que nous avons utilisé une fonction len() pour obtenir la longueur d'une chaîne. Comme la vérification de la longueur d'une séquence est une tâche courante, il est utile d'écrire une fonction qui peut le faire à plusieurs reprises à la demande.
Les fonctions sont une des façons les plus simples de réutilisation de code en Python, et elles vont nous permettre de commencer à penser à la conception de programmes (nous allons plonger plus profondément dans la conception lorsque nous découvrirons la Programmation Orientée Objet).
Voyons comment se construit une fonction avec Python. Elle a la forme suivante :
def nom_de_fonction(parm1,parm2):
'''
C'est l'endroit où placer la description de la fonction (doc-string)
'''
# Ici, on fait des chose
# Et on retourne le résultat
# Ce n'est plus la fonction
On commence par le terme def suivi du nom de la fonction séparé par un espace. Essayez de trouver un nom pertinent, par exemple len() est bien pour une fonction qui donne une longueur (length en anglais). Soyez également prudent quand vous choisissez un nom, vous ne devez pas appeler une fonction avec le même nom qu'une fonction intégrée dans Python (comme len).
Après le nom de la fonction nous trouvons une paire de parenthèses qui enferment un certain nombre d'arguments séparés par une virgule. Ces arguments sont les paramètres d'entrée de votre fonction. Vous pourrez utiliser ces paramètres dans votre fonction et les référencer comme variables. Un deux-points termine systématiquement la ligne de déclaration.
Nous arrivons à une étape très importante, vous devez indenter le code à l'intérieur de votre fonction car Python utilise les espaces pour organiser le code. La pluspart des autres langages de programmation ne le font pas, donc gardez bien cela à l'esprit.
Ensuite, vous verrez la "doc-string", c'est là que vous devez écrire une description simple de la fonction. Ce commentaire n'est pas obligatoire et pour les fonctions simples on peut sans doute s'en passer, mais c'est une bonne pratique de les écrire afin que vous ou d'autres personnes peuvent facilement comprendre le code que vous avez écrit.
C'est à partir de là que vous commencez à écrire le code que vous souhaitez exécuter.
Les exemples sont la meilleure façon d'apprendre à utiliser les fonctions. Nous allons donc en voir quelques uns qui utilisent différents objets et structures de données que nous avons vus auparavant.
def dire_bonjour():
print ('bonjour')
Appeler la fonction
dire_bonjour()
bonjour
Écrivons une fonciton simple qui souhaite la bienvenue en appelant les gens par leur nom
def bienvenue(nom):
print ('Bonjour %s' %nom)
bienvenue('Marc')
Bonjour Marc
def ajoute_nombre(nombre1,nombre2):
return nombre1+nombre2
ajoute_nombre(4,5)
9
# On peut aussi sauvegarder la valeur renvoyée dans une variable
résultat = ajoute_nombre(4,5)
print (résultat)
9
Que se passe-t-il avec des chaines de caractères ?
print (ajoute_nombre('one','two'))
onetwo
Remarquez que grace au typage faible des variables en Python, nous pouvons utiliser cette fonction pour additionner des nombres ou pour concatener des séquences ensemble ! Nous verrons ensuite comment ajouter des contrôles à l'entrée pour s'assurer que l'utilisateur a bien spécifier les paramèrtres attendus par la fonction.
Nous allons maintenant utiliser également les directives break, continue et pass dans notre code. Nous les avons découvertes dans la leçon sur les boucles while.
Pour terminer, voyons un exemple complet d'une fonction qui teste si un nombre est premier (un exercice relativement commun en entretien d'embauche...).
On sait qu'un nombre est premier si ce nombre est divisible uniquement par 1 et par lui même. Écrivons une première version de cette fonction en vérifiant tous les nombres de 1 à N avec modulo.
def est_premier(numéro):
'''
Méthode simple de vérification de nombre premiers
'''
for n in range(2,numéro):
if numéro % n == 0:
print ('non premier')
break
else: # si on a parcouru la boucle sans jamais avoir de reste à 0, le nombre est premier
print ('premier')
est_premier(16)
premier
Remarquez comment nous casssons la boucle en cas de nombre non premier après l'affichage du message ! Il est possible d'améliorer ce code en vérifiant uniquement jusqu'à la racine carrée du nombre cible, nous pouvons également ignorer tous les nombres pairs après avoir vérifié 2. Enfin, nous allons aussi retourner une valeur booléenne pour obtenir un exemple d'utilisation de l'instruction return:
import math
def est_premier(numéro):
'''
Méthode plus évoluée de vérifier les nombres premiers
'''
if numéro % 2 == 0 and numéro > 2:
return False
for i in range(3, int(math.sqrt(numéro)) + 1, 2):
if numéro % i == 0:
return False
return True
est_premier(14)
False
Bravo ! Vous devez maintenant avoir acquis les bases de la création d'une fonction en Python pour éviter d'avoir à ré-écrire le même code !