Introduction
A function is a block of instructions that performs an action and, once defined, can be reused. Functions make code more modular, allowing you to use the same code over and over again.
Python dispose d’un certain nombre de fonctions intégrées que vous connaissez peut-être, notamment :
print()
qui permet d’imprimer un objet dans le terminalint()
qui convertira une chaîne de caractères ou un nombre en un type de données entierlen()
qui renvoie la longueur d’un objet
Les noms des fonctions incluent des parenthèses et peuvent inclure des paramètres.
Dans ce tutoriel, nous verrons comment définir vos propres fonctions à utiliser dans vos projets de codage.
Prérequis
Vous devez avoir Python 3 installé et un environnement de programmation configuré sur votre ordinateur ou serveur. Si vous n’avez pas d’environnement de programmation configuré, vous pouvez vous référer aux guides d’installation et de configuration pour un environnement de programmation local ou pour un environnement de programmation sur votre serveur adapté à votre système d’exploitation (Ubuntu, CentOS, Debian, etc.).
Définition d’une fonction
Commençons par transformer le classique programme « Bonjour, tout le monde ! » en une fonction.
Nous allons créer un nouveau fichier texte dans notre éditeur de texte préféré, et nommer le programme hello.py
. Ensuite, nous allons définir la fonction.
A function is defined by using the def
keyword, followed by a name of your choosing, followed by a set of parentheses which hold any parameters the function will take (they can be empty), and ending with a colon.
Info: Pour suivre les exemples de code de ce tutoriel, ouvrez un shell interactif Python sur votre système local en exécutant la commande python3
. Ensuite, vous pouvez copier, coller ou modifier les exemples en les ajoutant après l’invite >>>
.
Dans ce cas, nous allons définir une fonction nommée hello()
:
Cela établit l’instruction initiale pour créer une fonction.
À partir de là, nous ajouterons une deuxième ligne avec une indentation de 4 espaces pour fournir les instructions sur ce que la fonction fait. Dans ce cas, nous allons imprimer Bonjour, tout le monde !
sur la console :
Notre fonction est maintenant entièrement définie, mais si nous exécutons le programme à ce stade, rien ne se passera car nous n’avons pas appelé la fonction.
Donc, en dehors de notre bloc de fonction définie, appelons la fonction avec hello()
:
Maintenant, exécutons le programme :
Vous devriez recevoir la sortie suivante:
OutputHello, World!
Les fonctions peuvent être plus compliquées que la fonction hello()
que nous avons définie ci-dessus. Par exemple, nous pouvons utiliser des boucles for
, des déclarations conditionnelles, et plus encore à l’intérieur de notre bloc de fonction.
Par exemple, la fonction définie ci-dessous utilise une déclaration conditionnelle pour vérifier si l’entrée pour la variable name
contient une voyelle, puis utilise une boucle for
pour itérer sur les lettres dans la chaîne name
.
La fonction noms()
que nous avons définie ci-dessus met en place une déclaration conditionnelle et une boucle for
, montrant comment le code peut être organisé à l’intérieur d’une définition de fonction. Cependant, selon ce que nous avons l’intention de faire avec notre programme et comment nous voulons organiser notre code, nous pouvons vouloir définir la déclaration conditionnelle et la boucle for
comme deux fonctions distinctes.
Définir des fonctions dans un programme rend notre code modulaire et réutilisable afin que nous puissions appeler les mêmes fonctions sans les réécrire.
Travailler avec des Paramètres
Jusqu’à présent, nous avons examiné des fonctions avec des parenthèses vides qui ne prennent pas d’arguments, mais nous pouvons définir des paramètres dans les définitions de fonctions à l’intérieur de leurs parenthèses.
A parameter is a named entity in a function definition, specifying an argument that the function can accept.
Créons un petit programme qui prend en paramètres x
, y
et z
. Nous allons créer une fonction qui ajoute les paramètres ensemble dans différentes configurations. Les sommes de ceux-ci seront imprimées par la fonction. Ensuite, nous appellerons la fonction et passerons des nombres dans la fonction.
Nous avons passé le nombre 1
pour le paramètre x
, 2
pour le paramètre y
et 3
pour le paramètre z
. Ces valeurs correspondent à chaque paramètre dans l’ordre où ils sont donnés.
Le programme fait essentiellement le calcul suivant en fonction des valeurs que nous avons passées aux paramètres:
a = 1 + 2
b = 1 + 3
c = 2 + 3
La fonction imprime également a
, b
et c
, et en fonction du calcul ci-dessus, nous nous attendons à ce que a
soit égal à 3
, b
soit 4
et c
soit 5
. Exécutons le programme:
Output3 4 5
Lorsque nous passons 1
, 2
et 3
comme paramètres à la fonction add_numbers()
, nous obtenons la sortie attendue.
Les paramètres sont des arguments qui sont généralement définis comme des variables dans les définitions de fonction. Ils peuvent recevoir des valeurs lors de l’exécution de la méthode, en passant les arguments dans la fonction.
Arguments par mot-clé
En plus d’appeler les paramètres dans l’ordre, vous pouvez utiliser des arguments par mot-clé dans un appel de fonction, où l’appelant identifie les arguments par le nom du paramètre.
Lorsque vous utilisez des arguments par mot-clé, vous pouvez utiliser des paramètres dans un ordre différent car l’interpréteur Python utilisera les mots-clés fournis pour faire correspondre les valeurs aux paramètres.
Créons maintenant une fonction qui nous montrera les informations de profil pour un utilisateur. Nous passerons des paramètres sous forme de nom_utilisateur
(censé être une chaîne de caractères) et abonnés
(censé être un entier).
Dans la déclaration de définition de fonction, nom_utilisateur
et abonnés
sont contenus entre parenthèses de la fonction profile_info()
. Le bloc de la fonction imprime des informations sur l’utilisateur sous forme de chaînes de caractères, en utilisant les deux paramètres.
Maintenant, nous pouvons appeler la fonction et lui attribuer des paramètres :
Dans le premier appel de fonction, nous avons rempli les informations avec un nom d’utilisateur de sammyshark
et un nombre de followers de 945
, dans le deuxième appel de fonction nous avons utilisé des arguments de mots-clés, attribuant des valeurs aux variables d’argument.
Exécutons le programme :
OutputUsername: sammyshark
Followers: 945
Username: AlexAnglerfish
Followers: 342
La sortie nous montre les noms d’utilisateur et les nombres de followers pour les deux utilisateurs.
Cela nous permet également de modifier l’ordre des paramètres, comme dans cet exemple du même programme avec un appel différent :
Quand nous exécutons à nouveau le programme avec la commande python profile.py
, nous recevrons la sortie suivante :
OutputUsername: cameron-catfish
Followers: 820
Parce que la définition de fonction maintient le même ordre des instructions print()
, si nous utilisons des arguments de mots-clés, l’ordre dans lequel nous les passons à l’appel de fonction n’a pas d’importance.
Valeurs d’argument par défaut
Nous pouvons également fournir des valeurs par défaut pour un ou les deux paramètres. Créons une valeur par défaut pour le paramètre followers
avec une valeur de 1
:
Maintenant, nous pouvons exécuter la fonction avec seulement la fonction d’utilisateur attribuée, et le nombre de followers sera automatiquement par défaut à 1. Nous pouvons également toujours changer le nombre de followers si nous le souhaitons.
Quand nous exécutons le programme avec la commande python profile.py
, nous recevrons la sortie suivante :
OutputUsername: JOctopus
Followers: 1
Username: sammyshark
Followers: 945
Fournir des paramètres par défaut avec des valeurs peut nous permettre de sauter la définition de valeurs pour chaque argument qui a déjà une valeur par défaut.
Retourner une valeur
Vous pouvez passer une valeur de paramètre dans une fonction, et une fonction peut également produire une valeur.
A function can produce a value with the return
statement, which will exit a function and optionally pass an expression back to the caller. If you use a return
statement with no arguments, the function will return None
.
Jusqu’à présent, nous avons utilisé l’instruction print()
au lieu de l’instruction return
dans nos fonctions. Créons un programme qui, au lieu d’imprimer, renverra une variable.
Dans un nouveau fichier texte appelé square.py
, nous allons créer un programme qui élève au carré le paramètre x
et renvoie la variable y
. Nous effectuons un appel à print de la variable résultat
, qui est formée en exécutant la fonction square()
avec 3
passé en paramètre.
Nous pouvons exécuter le programme et recevoir la sortie :
Output9
L’entier 9
est retourné en sortie, ce à quoi nous nous attendrions en demandant à Python de trouver le carré de 3.
Pour mieux comprendre le fonctionnement de l’instruction return
, nous pouvons commenter l’instruction return
dans le programme :
Maintenant, exécutons à nouveau le programme :
OutputNone
Sans utiliser l’instruction return
ici, le programme ne peut pas renvoyer de valeur, donc la valeur par défaut est None
.
Comme autre exemple, dans le programme add_numbers.py
ci-dessus, nous pourrions remplacer l’instruction print()
par une instruction return
.
En dehors de la fonction, nous avons défini la variable sums
égale au résultat de la fonction prenant 1
, 2
et 3
comme nous l’avons fait précédemment. Ensuite, nous avons appelé un affichage de la variable sums
.
Exécutons à nouveau le programme maintenant qu’il contient l’instruction return
:
Output(3, 4, 5)
Nous recevons les mêmes nombres 3
, 4
et 5
en sortie que ceux que nous avons obtenus précédemment en utilisant l’instruction print()
dans la fonction. Cette fois, il est livré sous forme de tuple car la liste d’expressions de l’instruction return
comporte au moins une virgule.
Les fonctions se terminent immédiatement lorsqu’elles rencontrent une instruction return
, qu’elles retournent ou non une valeur.
En utilisant l’instruction return
à l’intérieur de la boucle for
, la fonction se termine, donc la ligne qui est en dehors de la boucle ne s’exécutera pas. Si, au contraire, nous avions utilisé une instruction break
, seule la boucle aurait été interrompue à ce moment-là, et la dernière ligne print()
s’exécuterait.
Le statement return
quitte une fonction et peut retourner une valeur lorsqu’il est émis avec un paramètre.
Utilisation de main()
comme une fonction
Bien que en Python vous puissiez appeler la fonction en bas de votre programme et qu’elle s’exécutera (comme nous l’avons fait dans les exemples ci-dessus), de nombreux langages de programmation (comme C++ et Java) nécessitent une fonction main
pour s’exécuter. Inclure une fonction main()
, bien que ce ne soit pas obligatoire, peut structurer nos programmes Python de manière logique en regroupant les composants les plus importants du programme dans une seule fonction. Cela peut également rendre nos programmes plus faciles à lire pour les non-programmeurs Python.
Nous allons commencer par ajouter une fonction main()
au programme hello.py
ci-dessus. Nous conserverons notre fonction hello()
, puis définirons une fonction main()
:
Dans la fonction main()
, incluons une instruction print()
pour nous indiquer que nous sommes dans la fonction main()
. De plus, appelons la fonction hello()
dans la fonction main()
:
Enfin, au bas du programme, nous appellerons la fonction main()
:
À ce stade, nous pouvons exécuter notre programme:
Nous recevrons la sortie suivante:
OutputThis is the main function.
Hello, World!
Parce que nous avons appelé la fonction hello()
à l’intérieur de main()
et ensuite seulement appelé main()
pour l’exécuter, le texte Hello, World!
s’est imprimé une seule fois, après la chaîne qui nous indiquait que nous étions dans la fonction principale.
Ensuite, nous allons travailler avec plusieurs fonctions, donc il vaut la peine de passer en revue la portée des variables globales et locales. Si vous définissez une variable dans un bloc de fonction, vous ne pourrez utiliser cette variable que dans cette fonction. Si vous souhaitez utiliser des variables entre les fonctions, il peut être préférable de déclarer une variable globale.
En Python, '__main__'
est le nom de l’espace où le code de niveau supérieur s’exécutera. Lorsqu’un programme est exécuté à partir de l’entrée standard, d’un script ou d’un invite interactif, son __name__
est défini sur '__main__'
.
En raison de cela, il y a une convention d’utiliser la construction suivante:
Cela permet aux fichiers de programme d’être utilisés soit:
- comme le programme principal et exécute ce qui suit l’instruction
if
- comme un module et n’exécute pas ce qui suit l’instruction
if
.
Tout code qui n’est pas contenu dans cette déclaration sera exécuté lors de l’exécution. Si vous utilisez votre fichier de programme comme un module, le code qui n’est pas dans cette déclaration s’exécutera également lors de son importation lors de l’exécution du fichier secondaire.
Élargissons notre programme names.py
ci-dessus, et créons un nouveau fichier appelé more_names.py
. Dans ce programme, nous allons déclarer une variable globale et modifier notre fonction names()
originale afin que les instructions soient dans deux fonctions distinctes.
La première fonction, has_vowel()
, vérifiera si la chaîne name
contient une voyelle.
La deuxième fonction print_letters()
imprimera chaque lettre de la chaîne name
.
Avec cette configuration, définissons la fonction main()
qui contiendra un appel aux fonctions has_vowel()
et print_letters()
.
Finalement, nous ajouterons la construction if __name__ == '__main__':
en bas du fichier. Pour nos besoins, puisque nous avons mis toutes les fonctions que nous aimerions exécuter dans la fonction main()
, nous appellerons la fonction main()
suivant cette instruction if
.
Nous pouvons maintenant exécuter le programme:
Le programme affichera la même sortie que le programme names.py
, mais ici le code est plus organisé et peut être utilisé de manière modulaire sans modification.
Si vous ne vouliez pas déclarer une fonction main()
, vous auriez alternativement pu terminer le programme de cette manière:
Utiliser main()
comme fonction et l’instruction if __name__ == '__main__':
peut organiser votre code de manière logique, le rendant plus lisible et modulaire.
Conclusion
Les fonctions sont des blocs de code d’instructions qui effectuent des actions dans un programme, aidant à rendre notre code réutilisable et modulaire.
Pour en savoir plus sur la manière de rendre votre code plus modulaire, vous pouvez lire notre guide sur Comment écrire des modules en Python 3.
Source:
https://www.digitalocean.com/community/tutorials/how-to-define-functions-in-python-3