Réécrit le cours sur les fonctions python
This commit is contained in:
parent
e7d2e879cc
commit
90124bd7c3
1 changed files with 162 additions and 35 deletions
|
|
@ -2,58 +2,185 @@
|
||||||
|
|
||||||
## Fonctions
|
## Fonctions
|
||||||
|
|
||||||
Vous connaissez déjà certaines fonctions, celles que vous avez utilisées lors du précédent TP : `print`, `input`, `range` ... Ce sont des fonctions que vous avez **appelées** mais qui existent déjà par défaut dans le langage Python.
|
Vous connaissez déjà certaines fonctions, celles que vous avez utilisées lors du précédent TP : `print`, `input`, ...
|
||||||
|
Il en existe un très grand nombre, mais il est aussi très courant que les développeurs doivent écrire leurs propres fonctions.
|
||||||
|
|
||||||
|
Qu'est-ce qu'une fonction ?
|
||||||
|
|
||||||
|
```admonish success title="Définition"
|
||||||
|
Une fonction exécute une suite d'instructions pour réaliser une action précise. Elle possède un nom par lequel on peut l'appeler, pour réaliser cette suite d'instructions.
|
||||||
|
```
|
||||||
|
|
||||||
|
Autrement dit, une fonction exécute un ensemble d'actions pré-enregistrées, auxquelles on a donné un nom pour pouvoir réaliser ces actions plus facilement, sans avoir à toujours les répéter.
|
||||||
|
|
||||||
### Appeler une fonction
|
### Appeler une fonction
|
||||||
|
|
||||||
- Les fonction s'utilisent avec la syntaxe suivante : `nom_de_la_fonction(parametre_1, parametre_2, ...., parametre_n)`
|
Appeler une fonction, c'est lui demander de faire la tâche pour laquelle elle a été conçue : exécuter les instructions qui la composent.
|
||||||
- Vous mettez le nom de la fonction, suivi de parenthèses
|
|
||||||
- Entre les parenthèses vous mettez les paramètres séparés par des virgules
|
|
||||||
- Si une fonction n'a pas besoin de paramètres, les parenthèses sont quand même indispensables.
|
|
||||||
|
|
||||||
- Certaines fonctions peuvent prendre des paramètres nommés, avec la syntaxe suivante : `nom_de_la_fonction(nom_parametre=valeur_parametre)`. Les paramètres nommés sont toujours à la fin et leur ordre n'a pas d'importance.
|
Les fonctions s'appellent avec la syntaxe suivante :
|
||||||
|
|
||||||
- Une fonction peut renvoyer un résultat, que l'on peut alors affecter à une variable.
|
```python
|
||||||
- Si une fonction ne renvoie rien, alors elle renverra en réalité la valeur spéciale `None`.
|
nom_de_la_fonction(parametre_1, parametre_2, ...., parametre_n)
|
||||||
|
|
||||||
```admonish success title='À retenir'
|
|
||||||
- Les fonctions servent à rendre votre code plus clair et mieux découpé. Elles permettent de réutiliser du code.
|
|
||||||
- Pour déclarer une fonction en python :
|
|
||||||
~~~python
|
|
||||||
def nom_de_la_fonction(parametre_1, parametre_2, ..., parametre_n):
|
|
||||||
# Instructions
|
|
||||||
~~~
|
|
||||||
- On utilise le mot-clé `def` suivi du nom de la fonction.
|
|
||||||
- Entre parenthèses on ajoute les paramètres qu'il faudra fournir
|
|
||||||
- À la fin de la ligne on met `:` (encore et toujours)
|
|
||||||
- On passe à la ligne suivante et on indente pour écrire les instructions.
|
|
||||||
- Les paramètres fonctionnent comme des variables : on peut les utiliser dans la fonction avec leur nom.
|
|
||||||
- On peut définir une valeur par défaut à un paramètre : il suffit d'écrire `parametre=valeur_par_defaut` lors de la déclaration. On peut alors omettre le paramètre, qui prendra automatiquement la valeur par défaut.
|
|
||||||
- Deux fonctions ne peuvent pas avoir le même nom, sinon, la dernière a avoir été déclarée écrase la précédente.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```admonish success title="À retenir"
|
- Vous mettez le nom de la fonction, suivi de parenthèses
|
||||||
- L'instruction `return` permet de sortir immédiatement d'une fonction. Rien ne s'exécutera après le `return`
|
- Ce qui se trouve entre les parenthèses s'appelle les **paramètres** parfois appelés **arguments**
|
||||||
- `return` permet de retourner un résultat, avec la syntaxe `return valeur`. Si aucune valeur n'est mentionnée, elle retournera `None`
|
- On sépare les paramètres par une virgule
|
||||||
- Si `return` n'est pas mentionnée, la fonction s'exécute jusqu'au bout et sortira à la fin du bloc d'instructions en retournant `None`
|
- Si une fonction n'a pas besoin de paramètres, les parenthèses sont quand même indispensables.
|
||||||
- On peut retourner plusieurs valeurs en les séparant par une virgule.
|
|
||||||
- Ces valeurs peuvent être affectées à une seule variable sous forme d'un **tuple** (nous en parlerons au prochain TP)
|
#### Paramètres
|
||||||
- Chaque valeur peut être affectée à une variable différente avec la syntaxe `variable_1, variable_2 ... = nom_de_la_fonction(...)`.
|
|
||||||
|
Les paramètres sont des données que l'ont fournit à la fonction pour qu'elle puisse adapter son résultat à notre besoin.
|
||||||
|
|
||||||
|
```admonish example title="Exemple"
|
||||||
|
La fonction `print` affiche une chaîne de caractères. On lui passe la chaîne que l'on veut afficher en paramètre :
|
||||||
|
~~~python
|
||||||
|
# Pour afficher "Hello, World!", on passe en paramètre "Hello, World!" à print
|
||||||
|
print("Hello, World!")
|
||||||
|
~~~
|
||||||
```
|
```
|
||||||
|
|
||||||
```admonish tip title='Bonnes pratiques'
|
#### Paramètres nommés
|
||||||
|
|
||||||
|
Certaines fonctions peuvent prendre des paramètres particuliers, nommés. C'est à dire qu'au lieu de se baser sur l'ordre des paramètres, on va écrire leur nom.
|
||||||
|
|
||||||
|
Cela ressemblera à ça :
|
||||||
|
```python
|
||||||
|
nom_de_la_fonction(nom_parametre=valeur_parametre)
|
||||||
|
```
|
||||||
|
|
||||||
|
```admonish example title="Exemple"
|
||||||
|
La fonction `print` sépare ses arguments avec des espaces. Si on donne une valeur au paramètre `sep`, on peut changer le caractère que `print` utilisera pour séparer les chaînes de caractères
|
||||||
|
~~~python
|
||||||
|
# Par défaut, print sépare les chaînes de caractères avec des espaces
|
||||||
|
>>> print("foo", "bar")
|
||||||
|
foo bar
|
||||||
|
|
||||||
|
# Mais si on met sep='|', c'est le caractère '|' qui séparera les chaînes de caractères
|
||||||
|
>>> print("foo", "bar", sep="|")
|
||||||
|
foo|bar
|
||||||
|
~~~
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Retourner une valeur
|
||||||
|
|
||||||
|
Une fonction peut renvoyer un résultat, que l'on peut alors affecter à une variable avec la syntaxe suivante :
|
||||||
|
```python
|
||||||
|
ma_variable = ma_fonction()
|
||||||
|
```
|
||||||
|
|
||||||
|
```admonish example title="Exemple"
|
||||||
|
Si la fonction `add` fait la somme des nombres qu'on lui passe en paramètre :
|
||||||
|
~~~python
|
||||||
|
ma_variable = add(1, 3) # add fait 1 + 3 et retourne le résultat dans ma_variable
|
||||||
|
# ma_variable vaut alors 4
|
||||||
|
~~~
|
||||||
|
```
|
||||||
|
|
||||||
|
```admonish tip title="Remarque"
|
||||||
|
Si une fonction ne renvoie rien, alors elle renverra en réalité la valeur spéciale `None`.
|
||||||
|
|
||||||
|
`None` est considérée comme `False` dans une condition
|
||||||
|
```
|
||||||
|
|
||||||
|
### Créer nos propres fonctions
|
||||||
|
|
||||||
|
On va pouvoir regrouper des instructions que l'on souhaite répéter et créer des fonctions pour appeler toutes ces instructions avec un simple nom.
|
||||||
|
Les fonctions servent à rendre votre code plus clair et mieux découpé. Elles permettent de réutiliser du code.
|
||||||
|
|
||||||
|
Pour déclarer une fonction en python :
|
||||||
|
```python
|
||||||
|
def nom_de_la_fonction(parametre_1, parametre_2, ..., parametre_n):
|
||||||
|
# Ici on mettra les instructions indentées (décalées)
|
||||||
|
```
|
||||||
|
- On utilise le mot-clé `def` suivi du nom de la fonction.
|
||||||
|
- Entre parenthèses on ajoute les paramètres qu'il faudra **fournir**
|
||||||
|
- À la fin de la ligne on met `:` (encore et toujours)
|
||||||
|
- On passe à la ligne suivante et **on indente** pour écrire les instructions.
|
||||||
|
|
||||||
|
```admonish warning title="Attention"
|
||||||
|
Deux fonctions ne peuvent pas avoir le même nom, sinon, la dernière a avoir été déclarée écrase la précédente.
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Les paramètres
|
||||||
|
A l'intérieur d'une fonction, les paramètres fonctionnent comme des variables : on peut les utiliser avec leur nom.
|
||||||
|
|
||||||
|
```admonish example title="Exemple"
|
||||||
|
On veut écrire une fonction `ma_fonction` qui affiche deux nombres, puis on l'appelle avec les nombres 2 et 5
|
||||||
|
~~~python
|
||||||
|
def add(a, b):
|
||||||
|
print(a)
|
||||||
|
print(b)
|
||||||
|
|
||||||
|
add(2, 5)
|
||||||
|
# Résultat affiché :
|
||||||
|
# 2
|
||||||
|
# 5
|
||||||
|
~~~
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Valeurs par défaut
|
||||||
|
|
||||||
|
Les paramètres peuvent être optionnels. Pour cela, il faut qu'ils aient une **valeur par défaut**.
|
||||||
|
|
||||||
|
La valeur par défaut est la valeur que prend le paramètre si on ne lui en fournit aucune autre.
|
||||||
|
|
||||||
|
```admonish example title="Exemple"
|
||||||
|
~~~python
|
||||||
|
def ma_fonction(parametre="valeur par défaut"):
|
||||||
|
print(parametre)
|
||||||
|
|
||||||
|
ma_fonction()
|
||||||
|
# Résultat affiché : valeur par défaut
|
||||||
|
ma_fonction(parametre="Autre valeur")
|
||||||
|
# Résultat affiché : Autre valeur
|
||||||
|
~~~
|
||||||
|
```
|
||||||
|
|
||||||
|
#### L'instruction `return`
|
||||||
|
|
||||||
|
L'instruction `return` permet deux choses :
|
||||||
|
- Sortir immédiatement de la fonction
|
||||||
|
- Si on lui fournit une valeur, la fonction **renvoie** cette valeur (sinon, elle renvoie la valeur spéciale `None`)
|
||||||
|
|
||||||
|
```admonish example title="Exemple"
|
||||||
|
La fonction `add` additionne les deux nombres passé en paramètre
|
||||||
|
~~~python
|
||||||
|
def add(a, b):
|
||||||
|
somme = a + b
|
||||||
|
return somme
|
||||||
|
~~~
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Bonnes pratiques
|
||||||
|
|
||||||
- Faites des fonctions courtes qui vont à l'essentiel (20 lignes est un bon maximum)
|
- Faites des fonctions courtes qui vont à l'essentiel (20 lignes est un bon maximum)
|
||||||
- Choisissez bien les noms de vos fonctions et de vos paramètres pour qu'ils soient clairs et explicites
|
- Choisissez bien les noms de vos fonctions et de vos paramètres pour qu'ils soient clairs et explicites
|
||||||
|
- Faites en sorte que vos fonctions fassent une seule tâche (qui peut nécessiter plusieurs instructions, bien évidemment !)
|
||||||
- Vous pouvez documenter vos fonctions à l'aide d'une **docstring** : après l'en-tête de la fonction, avant le bloc d'instructions vous pouvez écrire une chaîne de caractères qui commence par 3 `"` ou `'`.
|
- Vous pouvez documenter vos fonctions à l'aide d'une **docstring** : après l'en-tête de la fonction, avant le bloc d'instructions vous pouvez écrire une chaîne de caractères qui commence par 3 `"` ou `'`.
|
||||||
Exemple:
|
Exemple:
|
||||||
~~~python
|
```python
|
||||||
def ma_fonction(arg_1, arg2):
|
def ma_fonction(arg_1, arg2):
|
||||||
"""Ceci est une docstring qui vient documenter ma fonction.
|
"""Ceci est une docstring qui vient documenter ma fonction.
|
||||||
Une docstring peut prendre plusieurs lignes.
|
|
||||||
|
Une docstring peut prendre plusieurs lignes. Une bonne docstring vient expliquer les arguments
|
||||||
|
et ce que renvoie la fonction.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
arg_1 : Any
|
||||||
|
Argument d'exemple
|
||||||
|
arg_2 : Any
|
||||||
|
Autre argument d'exemple
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
bool
|
||||||
|
Retourne un booléen pour l'exemple
|
||||||
"""
|
"""
|
||||||
# Bloc d'instructions
|
# Bloc d'instructions
|
||||||
~~~
|
return True
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# Annexes
|
# Annexes
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue