python:bases:fonction

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
python:bases:fonction [2022/06/14 17:48] philpython:bases:fonction [2024/02/29 08:40] (Version actuelle) – [1.2 L'instruction return] phil
Ligne 3: Ligne 3:
 ===== Python - Les fonctions ===== ===== Python - Les fonctions =====
  
-[Mise à jour le : 14/6/2022]+[Mise à jour le : 29/2/2024]
  
   * **Sources**    * **Sources** 
Ligne 10: Ligne 10:
  
   * **Ressources**    * **Ressources** 
 +    * <html><a href="https://www.pythonmorsels.com/built-in-functions-in-python/" target="_blank">Fonctions intégrées Python à connaître</a></html>
     * **Real Python** : <html><a href="https://realpython.com/python-main-function/" target="_blank">Defining Main Functions in Python</a></html>     * **Real Python** : <html><a href="https://realpython.com/python-main-function/" target="_blank">Defining Main Functions in Python</a></html>
  
   * **Mots-clés** : fonction, paramètre, déclaration, appel, signature, docstring, indication de type, lambda, espace de nom.   * **Mots-clés** : fonction, paramètre, déclaration, appel, signature, docstring, indication de type, lambda, espace de nom.
  
-<note important>Les mots ci-dessous sont dits "réservés". Ils ne peuvent pas être utilisés comme nom de variable. Les mots __soulignés__ sont une nouveauté de Python 3. Les mots en **gras** sont utilisés dans cette page.</note>+<callout type="warning" icon="true">Les mots ci-dessous sont dits "réservés". Ils ne peuvent pas être utilisés comme nom de variable. Les mots __soulignés__ sont une nouveauté de Python 3. Les mots en **gras** sont utilisés dans cette page.</callout>
  
 |  and        |  continue    finally      is            |  raise       | |  and        |  continue    finally      is            |  raise       |
Ligne 33: Ligne 34:
 En programmation, une fonction est un « **sous-programme** » permettant d'effectuer des opérations répétitives. Au lieu d'écrire le code complet autant de fois que nécessaire, on crée une fonction que l’on appellera pour l'exécuter, ce qui peut aussi alléger le code et le rendre plus lisible. <html><a href="https://fr.wikiversity.org/wiki/G%C3%A9n%C3%A9ralit%C3%A9s_sur_les_fonctions" target="_blank">Wikiversité</a></html> En programmation, une fonction est un « **sous-programme** » permettant d'effectuer des opérations répétitives. Au lieu d'écrire le code complet autant de fois que nécessaire, on crée une fonction que l’on appellera pour l'exécuter, ce qui peut aussi alléger le code et le rendre plus lisible. <html><a href="https://fr.wikiversity.org/wiki/G%C3%A9n%C3%A9ralit%C3%A9s_sur_les_fonctions" target="_blank">Wikiversité</a></html>
  
-<note>Pour utiliser une fonction, deux étapes sont nécessaires : \\+<callout type="primary" icon="true">Pour utiliser une fonction, deux étapes sont nécessaires : \\
 1. **déclarer** la fonction \\ 1. **déclarer** la fonction \\
 2. **appeler** la fonction 2. **appeler** la fonction
-</note>+</callout>
  
 === 1.1 Forme simple de la déclaration et de l'appel (ordonnée)=== === 1.1 Forme simple de la déclaration et de l'appel (ordonnée)===
-> Dans cette forme, les arguments sont dits:"positionnels" car leur position lors de l'appel doit correspondre à la position des paramètres dans l'en-tête de la fonction.+<callout type="info" icon="true">Dans cette forme, les arguments sont dits:"**positionnels**" car leur position lors de l'appel doit correspondre à la position des paramètres dans l'en-tête de la fonction.</callout>
  
 <code python *.py> <code python *.py>
Ligne 61: Ligne 62:
  
 === 1.2 L'instruction return === === 1.2 L'instruction return ===
-> L'instruction **//return//** renvoie la valeur calculée par une fonction. On peut ainsi l'affecter à une variable. Cette instruction arrête le déroulement de la fonction. Le code situé après //return// ne s'exécutera pas.+<callout type="info" icon="true">L'instruction **//return//** renvoie la valeur calculée par une fonction. On peut ainsi l'**affecter** à une variable. Cette instruction arrête le déroulement de la fonction. Le code situé après //return// ne s'exécutera pas.</callout>
  
-<note>En Python, une fonction **peut renvoyer plusieurs valeurs**, séparées par une virgule, que l'on affecte à plusieurs variables également séparées par une virgule.</note>+<callout type="primary" icon="true">En Python, une fonction **peut renvoyer plusieurs valeurs**, séparées par une virgule, que l'on affecte à plusieurs variables également séparées par une virgule.</callout>
  
 //Exemple// //Exemple//
Ligne 80: Ligne 81:
 Python ne disposant pas d'accolade pour délimiter les blocs de code, il existe une instruction **pass**, qui ne fait rien.  Python ne disposant pas d'accolade pour délimiter les blocs de code, il existe une instruction **pass**, qui ne fait rien. 
  
-<note tip>**pass** permet de définir une **fonction vide**. </note>+<callout type="tip" icon="true">**pass** permet de définir une **fonction vide**.</callout>
  
 //Exemple// //Exemple//
Ligne 90: Ligne 91:
 === 1.4 Signature d'une fonction === === 1.4 Signature d'une fonction ===
  
-<note>En Python, **la signature** d'une fonction est **son nom**. </note>+<callout type="primary" icon="true">En Python, **la signature** d'une fonction est **son nom**.</callout>
  
 //Exemple// //Exemple//
Ligne 98: Ligne 99:
 </code> </code>
  
-<note warning>**On ne peut pas __surcharger__ les fonctions en Python**. \\ **Deux fonctions ne peuvent pas avoir le même nom**. </note>+<callout icon="fa fa-hand-stop-o" color="red" title="ATTENTION">**On ne peut pas __surcharger__ les fonctions en Python**. \\ **Deux fonctions ne peuvent pas avoir le même nom**. </callout>
  
 === 1.5 Indication de type === === 1.5 Indication de type ===
-<note>Depuis **Python 3.5**, il est possible de fournir des indicateurs de type lors de la définition des fonctions.</note+<callout type="primary" icon="true">Depuis **Python 3.5**, il est possible de fournir des indicateurs de type lors de la définition des fonctions.</callout
  
 //Exemple// //Exemple//
Ligne 139: Ligne 140:
  
 === 2.1 Paramètres par défaut (optionnels) === === 2.1 Paramètres par défaut (optionnels) ===
-<note>On peut préciser une **valeur par défaut** pour les paramètres de la fonction.</note>+<callout type="primary" icon="true">On peut préciser une **valeur par défaut** pour les paramètres de la fonction.</callout>
  
 <code python exfonc2.py> <code python exfonc2.py>
Ligne 157: Ligne 158:
 </code> </code>
  
-<note>La chaîne placée entre **' ' '** et **' ' '** est une **docstring**, elle est affichable par **help(//nomfonction//)** +<callout type="primary" icon="true">La chaîne placée entre **' ' '** et **' ' '** est une **docstring**, elle est affichable par **help(//nomfonction//)** 
-</note>+</callout>
  
 // Exemple// // Exemple//
 {{ :python:docstring.png?nolink&500 |}} {{ :python:docstring.png?nolink&500 |}}
  
-<note tip>Les arguments peuvent être passés dans un** ordre quelconque** si on précise le nom des paramètres.</note>+<callout type="tip" icon="true">Les arguments peuvent être passés dans un** ordre quelconque** si on précise le nom des paramètres.</callout>
  
 // Exemple// // Exemple//
Ligne 175: Ligne 176:
 </code> </code>
  
-<note warning>Ne **pas** utiliser **d'objet mutable** pour les valeurs par défaut. A <html><a href="https://docs.python.org/3/faq/programming.html#why-are-default-values-shared-between-objects" target="_blank">voir.</a></html></note>+<callout icon="fa fa-hand-stop-o" color="red" title="ATTENTION">Ne **pas** utiliser **d'objet mutable** pour les valeurs par défaut. A <html><a href="https://docs.python.org/3/faq/programming.html#why-are-default-values-shared-between-objects" target="_blank">voir.</a></html></callout>
  
 //Exemple// //Exemple//
Ligne 193: Ligne 194:
 === 2.2 Liste et paramètres de fonction === === 2.2 Liste et paramètres de fonction ===
  
-<note>Lorsque le **nombre de paramètres** d'une fonction est **inconnu**, on lui passe une liste en plaçant une étoile <html><strong>*</strong></html> devant le nom du paramètre destiné à recevoir la liste.</note>+<callout type="primary" icon="true">Lorsque le **nombre de paramètres** d'une fonction est **inconnu**, on lui passe une liste en plaçant une étoile <html><strong>*</strong></html> devant le nom du paramètre destiné à recevoir la liste.</callout>
  
 //Exemple// //Exemple//
Ligne 205: Ligne 206:
 === 2.3 Dictionnaires et paramètres de fonction === === 2.3 Dictionnaires et paramètres de fonction ===
  
-<note>On peut récupérer les **paramètres nommés** dans une fonction en plaçant **deux étoiles** <html><strong>**</strong></html> devant le nom du paramètre destiné à recevoir le dictionnaire.</note>+<callout type="primary" icon="true">On peut récupérer les **paramètres nommés** dans une fonction en plaçant **deux étoiles** <html><strong>**</strong></html> devant le nom du paramètre destiné à recevoir le dictionnaire.</callout>
  
 //Exemple// //Exemple//
Ligne 217: Ligne 218:
  
 === 2.4 Synthèse === === 2.4 Synthèse ===
-<note>+<callout type="primary" icon="true">
 Lors de la **définition de l'en-tête** d'une fonction, les 4 familles de **paramètres** que l'on peut déclarer sont : Lors de la **définition de l'en-tête** d'une fonction, les 4 familles de **paramètres** que l'on peut déclarer sont :
   - les paramètres positionnels (usuels),   - les paramètres positionnels (usuels),
Ligne 228: Ligne 229:
   - passés avec la forme <nowiki>*</nowiki> (tuple unpacking)   - passés avec la forme <nowiki>*</nowiki> (tuple unpacking)
   - passés avec la forme <nowiki>**</nowiki> (dictionnaire)   - passés avec la forme <nowiki>**</nowiki> (dictionnaire)
-</note>+</callout> 
 ==== 3. Portée des variables ==== ==== 3. Portée des variables ====
 Les **arguments** passés dans les fonctions sont des //**variables locales**//. Elles n'existent qu'à l'intérieur de la fonction contrairement aux //**variables globales**// déclarées dans le programme principal. Pour plus d'informations, voir "[[python:bases:variables|Variables, types numériques et entrées / sorties dans la console]]" Les **arguments** passés dans les fonctions sont des //**variables locales**//. Elles n'existent qu'à l'intérieur de la fonction contrairement aux //**variables globales**// déclarées dans le programme principal. Pour plus d'informations, voir "[[python:bases:variables|Variables, types numériques et entrées / sorties dans la console]]"
Ligne 235: Ligne 237:
 Python permet de définir des **mini-fonctions** sur une ligne. Empruntées à Lisp, ces fonctions dites **lambda** peuvent être employées partout où une fonction est nécessaire.  Python permet de définir des **mini-fonctions** sur une ligne. Empruntées à Lisp, ces fonctions dites **lambda** peuvent être employées partout où une fonction est nécessaire. 
  
-<note>Une fonction lambda est une fonction qui prend un nombre quelconque d’arguments (y compris des arguments optionnels) et **retourne la valeur d’une unique expression**.</note>+<callout type="primary" icon="true">Une fonction lambda est une fonction qui prend un nombre quelconque d’arguments (y compris des arguments optionnels) et **retourne la valeur d’une unique expression**.</callout>
  
   * //Syntaxe//   * //Syntaxe//
Ligne 259: Ligne 261:
 </code> </code>
  
-<note warning>Les fonctions lambda ne peuvent ni contenir des commandes ni contenir plus d’une expression. </note>+<callout icon="fa fa-hand-stop-o" color="red" title="ATTENTION">Les fonctions lambda ne peuvent ni contenir des commandes ni contenir plus d’une expression. </callout>
  
 ==== 5. Les fonctions natives (buit-in) ==== ==== 5. Les fonctions natives (buit-in) ====
   * **Source** : <html><a href="https://docs.python.org/fr/3.5/library/functions.html" target="_blank">fonctions natives</a></html> sur python.org   * **Source** : <html><a href="https://docs.python.org/fr/3.5/library/functions.html" target="_blank">fonctions natives</a></html> sur python.org
  
-<note>L’interpréteur Python propose quelques **fonctions** et types natifs qui sont **toujours disponibles**. \\ La liste et la description sont accessibles à partir du lien ci-dessus.</note>+<callout type="primary" icon="true">L’interpréteur Python propose quelques **fonctions** et types natifs qui sont **toujours disponibles**. \\ La liste et la description sont accessibles à partir du lien ci-dessus.</callout>
  
 ==== 6. La fonction main() ==== ==== 6. La fonction main() ====
Ligne 275: Ligne 277:
 Néanmoins, avoir un point de départ défini pour l'exécution d'un programme est utile pour comprendre le fonctionnement d'un programme. Les programmeurs Python ont mis au point plusieurs conventions pour définir ce point de départ. Néanmoins, avoir un point de départ défini pour l'exécution d'un programme est utile pour comprendre le fonctionnement d'un programme. Les programmeurs Python ont mis au point plusieurs conventions pour définir ce point de départ.
  
-<note>Il existe deux manières de demander à l'interpréteur Python d'exécuter ou d'utiliser du code : \\ +<callout type="primary" icon="true">Il existe deux manières de demander à l'interpréteur Python d'exécuter ou d'utiliser du code : \\ 
 1. En tant que **script** à l'aide de la ligne de commande. \\  1. En tant que **script** à l'aide de la ligne de commande. \\ 
 2. En **important** le code d'un fichier Python dans un autre fichier ou dans l'interpréteur interactif. \\ \\  2. En **important** le code d'un fichier Python dans un autre fichier ou dans l'interpréteur interactif. \\ \\ 
 Quelle que soit la façon d'exécuter le code, Python définit une variable spéciale appelée **<nowiki>__name__</nowiki>** qui contient une chaîne dont la valeur dépend de la façon dont le code est utilisé. Quelle que soit la façon d'exécuter le code, Python définit une variable spéciale appelée **<nowiki>__name__</nowiki>** qui contient une chaîne dont la valeur dépend de la façon dont le code est utilisé.
-</note>+</callout>
  
   * // Première illustration de la valeur de <nowiki>__name__</nowiki> // : on crée le fichier //methodes.py// ci-dessous et on l'exécute.   * // Première illustration de la valeur de <nowiki>__name__</nowiki> // : on crée le fichier //methodes.py// ci-dessous et on l'exécute.
Ligne 296: Ligne 298:
 </code> </code>
  
-<note important>Un module **<nowiki>__name__</nowiki>** est égal à '**<nowiki>__main__</nowiki>**' lorsqu'il est lu à partir d'une entrée standard, d'un script ou d'une invite interactive.</note>+<callout type="warning" icon="true">Un module **<nowiki>__name__</nowiki>** est égal à '**<nowiki>__main__</nowiki>**' lorsqu'il est lu à partir d'une entrée standard, d'un script ou d'une invite interactive.</callout>
  
   * **//Bonnes pratiques//**   * **//Bonnes pratiques//**
Ligne 351: Ligne 353:
 {{ :python:bases:realpython.png?nolink|}} {{ :python:bases:realpython.png?nolink|}}
 ==== Pour aller plus loin ==== ==== Pour aller plus loin ====
-<html><a href="https://realpython.com/python-lambda/" target="_blank">How to Use Python Lambda Functions</a></html>+  * <html><a href="https://realpython.com/python-lambda/" target="_blank">How to Use Python Lambda Functions</a></html> 
 +  * <html><a href="https://realpython.com/run-python-scripts/" target="_blank">How to Run Your Python Scripts</a></html> 
 +  * <html><a href="https://realpython.com/python-sum-function/" target="_blank">Python's sum(): The Pythonic Way to Sum Values</a></html> 
 +  * <html><a href="https://realpython.com/len-python-function/" target="_blank">Using the len() Function in Python</a></html> 
 +  * <html><a href="https://realpython.com/python-min-and-max/" target="_blank">Python's min() and max(): Find Smallest and Largest Values</a></html> 
 +  * <html><a href="https://realpython.com/python-range/" target="_blank">The Python range() Function (Guide)</a></html>
  
 ---- ----
  • python/bases/fonction.1655221686.txt.gz
  • Dernière modification : 2022/06/14 17:48
  • de phil