{{backlinks>.}}
====== Fonctions ======
* Voir aussi [[python:introduction#les_fonctions|Fonctions]]
* **Créer** une fonction
def hello():
print("bonjour !")
* **Appeler** une fonction
hello()
>>> bonjour !
===== Instructions =====
Quand on stocke des valeurs dans des [[python:variable|variables]], on écrit, ligne après ligne
a = 1
b = 1
On peut aussi faire des calculs avec ces variables, sur une nouvelle ligne
c = a + b
Sur chacune de ces lignes, nous écrivons des [[wpfr>instruction informatique|instructions]]. Chaque instruction est une **étape** dans l'écriture d'un [[wpfr>algorithme]].
===== Fonctions =====
Les **[[https://maths.enseigne.ac-lyon.fr/spip/squelettes/docs_lyon/supports_formations/2017_Python_2nde/formation_upo_python_2nde/debutants/prem_prog.html|fonctions]]**, ce sont des **listes d'instructions**, comme des séries de calcul par exemple, que l'on regroupe et que l'on stocke dans un **nom de fonction**. Par exemple\ :
def addition():
a = 1
b = 1
c = a + b
Pour [[https://pyspc.readthedocs.io/fr/latest/05-bases/03-fonctions.html#Cr%C3%A9ation-d'une-fonction|écrire une fonction]], il faut respecter la syntaxe suivante\ :
* (1) Commencer par le **mot clé** ''def'', pour //définition// en anglais
* (2) Donner un **nom** à la fonction, ici ''addition''
* (3) Ajouter deux **parenthèses** ''()'' et **deux points** '':''
* (4) Ensuite on écrit la liste des **instructions** dans le «\ corps\ » de la fonction.
* Chaque ligne commence par un **tabulation** (touche [[icn>numerique:clavier|TAB]])
* Pour terminer l'écriture de la fonction, il faut ajouter une **nouvelle ligne**, vide, après la dernière instruction.
===== Usage =====
Pour l'instant, nous n'avons fait qu'//écrire// la fonction. Il faut maintenant //utiliser// la fonction pour qu'elle nous serve à quelque chose. Pour **utiliser** une fonction, il faut l'**appeler** par son nom, suivi de deux parenthèses\ :
addition()
Cette nouvelle ligne est encore une instruction, qui cette fois-ci //exécute// les instructions contenues dans le corps de la fonction. Ici, la valeur ''2'' est stockée dans une variable ''c''. Mais tout cela reste invisible. Pour l'instant alors ajoutons une nouvelle fonction pour afficher le résultat\ :
def addition():
a = 1
b = 1
c = a + b
print(c)
La fonction print()
est une **fonction interne** de Python qui permet d'afficher des résultats, //to print// en anglais.
Dans Blender, pour visualiser les «\ sorties\ », par exemple avec la fonction ''print()'', il faut ouvrir la **console système** dans le **menu fenêtre**\ :
{{https://i.stack.imgur.com/hK3bu.jpg}}
===== Arguments =====
Continuons d'«\ améliorer\ » cette fonction d'exemple en comprenant comment ajouter des **variables de fonction**. Au lieu de créer une fonction qui additionne ''1'' et ''1'', nous allons faire une fonction qui additionne deux //variables//\ :
def addition(a,b):
c = a + b
print(c)
Cette fonction qui «\ réécrit\ » une simple fonction d'addition équivalente à la touche ''+'' d'une calculette, prend maintenant deux **arguments** de fonction ''a'' et ''b''. Voici maintenant comment nous pouvons utiliser cette fonction\ :
addition(1,1)
ou
addition(0.5,1.5)
===== Sorties =====
On vient d'ajouter des arguments //en entrée// de fonction. Maintenant, ajoutons des arguments //de sortie// de fonction avec le mot clé **return** qui veut juste dire «\ retourner\ » en bon français. Pour l'instant, nous pouvions juste afficher le résultat de cette addition avec ''print()''. Mais il est en général plus utile d'écrire des fonctions qui prennent en entrée des arguments, qui sont des données, des valeurs, et qui retourne, en sortie, d'autres valeurs.
def addition(a,b):
c = a + b
return c
Maintenant nous pouvons nous servir de cette fonction ainsi\ :
c = addition(360,5)
print(c)
Quand nous exécutons ce code, la fonction ''addition()'' est «\ appelée\ » en prenant en compte les valeurs que nous lui donnons (qui sont donc //variables// en fonction des usages). La fonction effectue pas à pas les instructions qui sont contenues dans la fonction, puis «\ retourne\ » le résultat. Ce résultat, enfin, est stocké dans une nouvelle variable, ici nommée ''c''. Pour terminer, nous utilisons la //fonction interne// ''print()'' en «\ passant comme argument\ » notre variable ''c'' qui contient donc le résultat.
===== Conversion =====
Dans l'exemple précédent, si l'on voulait écrire en sortie quelque chose comme\ :
Le tour du monde en 365 jours
ou
Le tour du monde en 366 jours
il faudrait pouvoir écrire ceci\ :
c = addition(360,5)
print("Le tour du monde en " + c + " jours")
Mais ici, il faut réaliser une **conversion**, car nous voulons travailler avec deux types de variables\ :
* ''c'' est une variable de type **nombre**
Mais dans la fonction ''print()'', nous utilisons
* des **mots**, comme ''Le tour du monde en'' qui est une chaîne de caractères
Il faut donc convertir la valeur de ''c'' en chaîne de caractère, qu'en anglais, on appelle ''string''\ :
* on utilise la fonction interne ''str()'' pour convertir un **nombre** en **mot**, c'est-à-dire un « texte ».
Il faut donc écrire\ :
c = addition(360,5)
d = str(c)
print("Le tour du monde en " + d + " jours")
Ou d'une façon condensée\ :
print("Le tour du monde en " + str(addition(360,5)) + " jours")
* ''addition()'' renvoie le nombre ''365''
* ''str()'' renvoie le texte « 365 »
* on peut ensuite «\ additionner\ » ces trois «\ bouts de texte\ »
* ''Le tour du monde en '', ''365'', '' jours''