# Révision express fonctions

## But

* Révision rapide sur la création d'une fonction, l'appel d'une fonction et le passage de paramètres.
* Nouvelles notions dans la déclaration de fonctions :&#x20;
  * Définition de valeurs par défaut aux paramètres de fonctions
  * Annotation de types.

## Révision

Complétez le programme suivant de façon à ce que ça affiche les messages successifs:

* "Bonjour, Alice !"
* "Bonjour, Bob !"&#x20;

```python
def salutation(nom):
    print(f"Bonjour, {nom} !")

if __name__ == "__main__":
    salutation()
    salutation()
```

<details>

<summary><mark style="color:green;">Solution</mark></summary>

```python
def salutation(nom):
    print(f"Bonjour, {nom}!")

if __name__ == "__main__":
    salutation("Alice")
    salutation("Bob")
```

**Autre solution :**&#x20;

```python
def salutation(nom):
    print(f"Bonjour, {nom}!")

if __name__ == "__main__":

    nom_allocuteur = "Alice"
    salutation(nom_allocuteur)
    
    nom_allocuteur = "Bob"
    salutation(nom_allocuteur)
```

</details>

### Valeur par défaut dans les paramètres d'une fonction&#x20;

[Plus de détails dans les notes de cours.](https://cours-5.gitbook.io/dalicia-420-1g2-hu-logique-de-programmation/modularisation/creation-et-appels-des-fonctions#parametres-par-defaut)

Il est possible de donner une valeur par défaut à un paramètre d'une fonction. Exécutez ce programme, et analysez le résultat. Que remarquez-vous?

```python
def salutation(nom="à tous"):
    print(f"Bonjour, {nom} !")

if __name__ == "__main__":
    salutation()
    salutation("Alice")
```

<details>

<summary><mark style="color:green;">Explication</mark></summary>

* Lorsqu'on appelle la fonction `salutation` sans passer de valeur au paramètre `nom` de la fonction  `salutation()`, le paramètres `nom` de la fonction `salutation` prend par défaut la valeur "à tous".
* Lorsqu'on appelle la fonction `salutation` en passant une valeur au paramètre nom  `salutation("Alice")`, le paramètres nom de la fonction prend cette valeur passée en paramètre (`"Alice"`).

</details>

Il est également possible de spécifier le nom du paramètre lors du passage d'une valeur dans la fonction.

```python
def salutation(prenom, nom):
    print(f"Bonjour, {prenom} {nom} !")

if __name__ == "__main__":
    salutation(prenom="Alice", prenom="Merveille")
```

[Plus de détails dans les notes de cours.](https://cours-5.gitbook.io/dalicia-420-1g2-hu-logique-de-programmation/modularisation/creation-et-appels-des-fonctions#parametres-par-defaut)

### Annotation de types

Il est possible de spécifier le type de chaque paramètre dans une fonction (`str`, `int`, `float`, `list`, etc).

Exemple :&#x20;

```python
def salutation(prenom: str, nom: str):
    print(f"Bonjour, {prenom} {nom} !")

if __name__ == "__main__":
    salutation(prenom="Alice", nom="Merveille")
```
