Vous êtes sur la page 1sur 35

Python

Programmation modulaire
Plan

1. Les fonctions

2. Les modules
Définition des fonctions
Définition et appel d'une fonction

Définition

Appel
Appel des fonctions
Exemple
Valeur par défaut
Fonctions avec paramètres par défaut

Lorsqu’une fonction est souvent appelée avec les mêmes valeurs pour ses paramètres, il
est possible de spécifier pour ceux-ci une valeur par défaut.

N.B: si une valeur par défaut est spécifiée pour un paramètre, alors tous ceux qui suivent
devront eux aussi avoir une valeur par défaut (on ne peut pas avoir des paramètres
positionnels après des paramètres nommés).

Lors d’un appel à une fonction, on peut ne pas respecter l’ordre de définition des paramètres.
Fonction renvoyant plusieurs valeurs (1/2)
Fonction renvoyant plusieurs valeurs (2/2)
Passage des arguments
 Le passage des types primitifs ou des structures immutables (tuples,
ensembles, chaines de caractères) s'apparente à un passage par valeur.

 Le passage des types composés (listes, dictionnaires) s'apparente à un


passage par référence.
Passage de paramètres
Comment écrire une fonction qui modifie ses
paramètres ? (passage par référence)
1. En renvoyant un n-uplet de résultats : 3. En passant un dictionnaire, qui sera
modifié :

2. En passant un objet muable (modifiable


sur place) :
4. En utilisant des variables globales.
Portée des variables (1/2)

• La portée d’une variable associée à un identificateur recouvre la portion du


programme à l’intérieur de laquelle ce même identificateur la désigne.

• Une variable locale est une variable dont la portée est réduite à une fonction.

• Une variable globale est une variable dont la portée est l’ensemble du
programme.

• Pour accéder à une variable globale dans une fonction, il faut la précéder par
le mot global. A défaut, elle sera considérée comme étant une variable locale.
14
Portée des variables (2/2)
Imbrication des fonctions
Exercices
• Écrire une fonction parler_enthousiasme qui prend un argument positionnel
obligatoire (un message) et deux arguments optionnels nommés, le premier étant
un entier se référant au nombre de points d'exclamation à mettre à la fin du
message (par défaut à 1), et le second étant un booléen indiquant s'il faut ou non
mettre le message en majuscule (par défaut à False).

• Ecrire une fonction affiche_employee() de telle sorte qu’elle accepte le nom de


l’employé et son salaire et affiche les deux. Si le salaire est manquant, attribuez la
valeur 3000 par défaut au salaire.
Nombre de paramètres variable
 Pour certaines applications, le nombre de paramètres communiqués à une fonction peut varier.

def nom_fonction(x,y, *args,**kargs)

 Le site *args et **kwargs est une idiome commune pour permettre un nombre arbitraire d'arguments aux
fonctions :

Si le nombre des paramètres positionnels varie alors il faut


empaqueter les paramètres dans un tuple. Le site *args vous
donnera tous les paramètres de la fonction comme un tuple

Si le nombre des paramètres nommés varie alors il faut


empaqueter les paramètres dans un dictionnaire.
Le site **kwargs vous donnera tout arguments de mots-
clés sauf ceux qui correspondent à un paramètre formel comme
un dictionnaire.
Nombre de paramètres variable
Nombre de paramètres variable

Les paramètres positionnels doivent figurer dans l’appel de la fonction avant les paramètres
nommés.
Exercice
Ecrire une fonction Ouvrage permettant d'afficher les différentes
informations inhérentes à un ouvrage sachant que seul le titre est
obligatoire. Un ouvrage peut avoir un nombre variable d'auteurs et un
utilisateur peut donner un certain nombre d'informtions supplémentaires
telles que année de parution, maison d'édition, volume, nombre de pages...
La fonction lambda

 Lorsque le code d’une fonction tient en une ligne et le résultat est une
expression, il est possible de condenser son écriture à l’aide du mot-
clé lambda.
Appliquer un même traitement à tous les
éléments d'une séquence

La fonction map() exécute une fonction spécifiée pour chaque élément


dans un itérable.
Exercice
Ecrire un script qui permet de trier une liste de dictionnaires où chaque élément
du dictionnaire représente un étudiant. Le tri doit se faire selon la note.
Les fonctions génératrices

• Il est assez simple de créer un générateur en Python. C’est aussi simple


que de définir une fonction normale, mais avec l’instruction yield au
lieu de l’instruction return.
• Si une fonction contient au moins une instruction yield elle devient
une fonction générateur. Yield et return, les deux renverront une
valeur d’une fonction.
• La différence est la suivante: l’instruction return termine une fonction
entièrement, l’instruction yield met la fonction en pause et enregistre
tous ses états.
Les fonctions génératrices

L’intérêt d’un générateur est qu’il n’est


pas nécessaire de construire en mémoire
la liste complète des éléments de la
séquence. Les générateurs ont donc une
empreinte mémoire très faible ce qui
permet d’écrire des programmes
optimisés.
Exercice
• Ecrire une fonction prenant un tuple de 10000 entiers et de retourner
le carré de tous ses éléments
• NB: on ne veut pas créer un deuxième tuple en mémoire
Principe des modules
Les packages et les modules

 Les modules permettent la séparation et donc une meilleure organisation du code.

 En Python, on peut distinguer trois grandes catégories de modules en les classant


selon leur éditeur :
◦ Les modules standards qui sont intégrés automatiquement par Python ;
◦ Les modules développés par des développeurs externes qu’on va pouvoir utiliser ;
◦ Les modules qu’on va développer nous mêmes.

 Python cherche automatiquement le module dans le «searchpath» c.-à-d. : le dossier


courant ou bien les dossiers listés dans la variable d’environnement PYTHONPATH
(configurable sous Windows)
Résumé
 Importer un module:
import nom_module

 Pour utiliser les éléments du module dans notre script, il faudra préfixer le nom de ces
éléments par le nom du module et un point.

 Pour accéder à un module qui se trouve dans un package


Import nom_package.module

 Créer un alias de nom pour un module


import nom_module as alea

 Importer uniquement certains éléments d’un module


from nom_module import element
Exemple
Exemple
Les packages et les modules

 Notez aussi que si du code Python se trouve en dehors de toute fonction dans
le module, il sera exécuté à son chargement. Pour éviter que cela se produise, il
faut “protéger” le code avec :
Gérer les packages
 pip est un outil de gestion des packages Python. Il permet d’installer
des packages, de les mettre à jours, et bien d’autres choses.
Exercice
• Ecrire un module nommé « tva.py ». Dans ce module, implémenter trois
fonctions pour calculer le nouveau prix après application d’une taxe comme
suit :
• Fonction pttc_reduit retourne le nouveau prix après application d’une taxe de 10%
• Fonction pttc_normal retourne le nouveau prix après application d’une taxe de 20%
• Fonction pttc_alimentaire retourne le nouveau prix après application d’une taxe de
5.5%

• Ecrire ensuite le fichier « appel_tva.py » qui fait appel au module tva.py,


demande à l’utilisateur de saisir un prix hors taxe et faire appel aux trois
fonctions pour afficher le nouveau pris TTC après applications des taxes

Vous aimerez peut-être aussi