Les Fonctions

Les fonctions permettent de grouper des instructions et de les appeler par un nom logique. Ceci permet entre-autres de limiter la duplication de code. Les fonctions peuvent attendre des paramètres et retourner des données.

Les fonctions sont définies par l'instruction def et sont appelées par leur nom suivi de parenthèses. Les parenthèses déclarent les paramètres attendus.


In [ ]:
def print_something():
    print("Something")
    
print_something()

print_something n'attends pas de paramètre. Vous pouvez l'appeler dans la cellule suivante (après avoir exécuté la cellule précédente afin que la fonction soit connue dans le notebook actuel).


In [ ]:

Les fonctions peuvent avoir des paramètres. Vous pouvez tester la fonction suivante en lui passant un paramètre.


In [ ]:
def print_param(param_to_print):
    print("exécuté avec", param_to_print)

In [ ]:

Vous pouvez déclarer des paramètres optionnels. Pour cela, une valeur par défaut doit être attribuée dans la signature de la fonction.


In [ ]:
def print_hello(who="World"):
    print("Hello {}".format(who))
    
print_hello()
print_hello("Me")
print_hello(who="You")

Exercices

Compteur d'éléments

Vous vous souvenez que les instructions des derniers exercices sur les boucles étaient très similaires ? Écrivez une fonction qui permet d'afficher chaque élément d'une séquence.

  • Affichez chaque caractère d'une chaine à l'aide de cette fonction.
  • Affichez chaque élément d'une liste à l'aide de cette fonction.
  • Afficher chaque mot de la chaîne de caractère à l'aide de cette fonction.

In [ ]:
CHAR_STRING = "Chaine de plusieurs mots"
ELEMENTS_LIST = ["Liste", "de", "plusieurs", "elements"]
# Écrivez votre fonction à la suite

In [ ]:
#Affichez chaque caractère d'une chaine à l'aide de cette fonction.

In [ ]:
#Affichez chaque élément d'une liste à l'aide de cette fonction.

In [ ]:
#Afficher chaque mot de la chaîne de caractère à l'aide de cette fonction.

Avez-vous remarqué que vous avez utilisé la même fonction pour des paramètres de types différents ? En Python, le type des données n'est pas important, c'est le principe du Duck Typing qui se résume par :

Si je vois un animal qui vole comme un canard, cancane comme un canard, et nage comme un canard, alors j'appelle cet oiseau un canard

Test de palindromes - exercice d'illustration

Une fonction permet également d'éviter les imbrications excessives de structures et ainsi rendre le code plus compréhensible.

Pour l'exercice suivant, nous souhaitons tester si chaque chaine de la liste SENTENCES est un palindrome. Le palindrome est une figure de style désignant un texte ou un mot dont l'ordre des lettres (hors espaces) reste le même qu'on le lise de gauche à droite ou de droite à gauche.

Nous souhaitons donc générer une liste palindrom_result où chaque élément palindrom_result[i] est un booléen de valeur True si l'élément à SENTENCES[i] est un palindrome, False sinon.

Vous n'avez à priori pas besoin d'une fonction pour générer cette liste. Écrivez le code générant la liste palindrom_result.

Rappel : pour itérer sur une collection tout en récupérant l'indice, vous avez la fonction enumerate(collection) :

>>> for element in enumerate('radar'):
...     print(element)
...
(0, 'r')
(1, 'a')
(2, 'd')
(3, 'a')
(4, 'r')

L'usage d'indices négatifs permet d'accéder aux éléments d'une collection à partir de la fin :

>>> print('Esope'[-1])
e

In [ ]:
SENTENCES = ["Esope reste ici et se repose",
             "La mariée ira mal",
             "radar"]

In [ ]:

Vous pouvez extraire une fonction de ce code. La fonction s'appellera is_palindrome(sequence) et retournera un booléen. Réécrivez le en conséquence.


In [ ]: