Cours :
Compétences Numériques et Programmation
[Link]
1 17/10/2024
Chapitre 3:
Fonctions et modules
Plan
• Définition et utilisation des fonctions
• Modules intégrés et bibliothèques standards
• Introduction aux bibliothèques tierces (NumPy, Pandas)
3 17/10/2024
Définition et utilisation des fonctions
• Définition de fonction :
On peut agir sur une variable (objet) en utilisant des fonctions (notion procédurale) ou
bien des méthodes (notion objet) spécifiques à l’objet utilisé.
Une fonction est une suite d'instructions que l'on peut appeler avec un nom et qui
retourne une valeur. Exemple de définition de fonction :
def indique_mon_age():
return 30
4 17/10/2024
Définition et utilisation des fonctions
• Définition de fonction :
Il est possible de définir une fonction qui utilise un ou plusieurs paramètres. Dans ce
cas les paramètres doivent obligatoirement être renseignés (ils sont obligatoires).
def indique_mon_age(naissance, actuelle ):
return actuelle - naissance
Python's functions are first-class objects
Par exemple, dans un tel langage, une fonction peut être transmise en tant qu'argument
à d'autres fonctions, peut être retournée par une autre fonction et peut être affectée en
tant que valeur à une variable.
5 17/10/2024
Définition et utilisation des fonctions
• Arguments avec valeur par défaut :
Il est possible de spécifier, lors de la déclaration, des valeurs par défaut à utiliser
pour les arguments. Cela permet, lors de l’appel, de ne pas avoir à spécifier les
paramètres correspondants.
Il est possible, en combinant les valeurs par défaut et le nommage des paramètres,
de n’indiquer à l’appel que les paramètres dont on désire modifier la valeur de
l’argument. Il est par contre nécessaire de regrouper tous les paramètres optionnels
à la fin de la liste des paramètres.
def accueil(nom, prenom, depart="MP", semestre="S2") :
print(prenom, nom, "Département", depart, "semestre", semestre)
semestre)
6 17/10/2024
Définition et utilisation des fonctions
• Les arguments variadiques :
Nous avons souvent besoin d'arguments variés (ou de paramètres) pour certaines
fonctions.
Par exemple, nous en avons besoin si nous ne connaissons pas le nombre d'arguments
passés ou si nous devons traiter quelque chose avec des arguments de passage
arbitraires pour certaines raisons.
Il y a 2 types d'arguments en Python :
• Argument positionnel : spécifié en fonction de sa position
• Argument mot-clé : spécifié par un mot clé (qui est le nom de l'argument).
7 17/10/2024
Définition et utilisation des fonctions
• Arguments positionnels et mots-clés :
# Une fonction qui montre les résultats de compétitions de course de 2 à 4 coureurs. def
save_ranking(premier, second, troisieme=None, quatrieme=None):
rank = {}
rank[1], rank[2] = premier, second
rank[3] = troisieme if troisieme is not None else 'Nobody’
rank[4] = quatrieme if quatrieme is not None else 'Nobody’
print(rank)
# Passez les 2 arguments positionnels
save_ranking('ming', 'alice’)
# Passez les 2 arguments positionnels et 1 argument mot-clé
save_ranking('alice', 'ming', troisieme='mike’)
# Passez les 2 arguments positionnels et 1 argument mots-clé (Mais, l'un d'eux a été passé comme argument de position)
save_ranking('alice', 'ming', 'mike', quatrieme='jim')
8 17/10/2024
Définition et utilisation des fonctions
• Arguments positionnels seulement :
def save_ranking(*args): print(args)
save_ranking('ming')
('ming',)
save_ranking('ming', 'alice', 'tom')
('ming','alice', 'tom')
save_ranking('ming', 'alice', 'tom', 'wilson', 'roy')
('ming', 'alice', 'tom', 'wilson', 'roy')
9 17/10/2024
Définition et utilisation des fonctions
• Arguments mots-clés seulement :
def save_ranking(** kwargs):
print(kwargs)
save_ranking(premier='ming', second='alice', troisieme ='wilson', quatrieme ='tom', cinquieme='roy')
{'premier': 'ming', 'second': 'alice', 'troisieme': 'wilson', 'quatrieme': 'tom', 'cinquieme': 'roy’}
10 17/10/2024
Définition et utilisation des fonctions
• Composition arguments positionnels et mots-clés :
def save_ranking(*args, ** kwargs):
print(args)
print(kwargs)
save_ranking('ming', 'alice', 'wilson', quatrieme='tom', cinquieme='roy')
('ming', 'alice', 'wilson')
{'quatrieme': 'tom', 'cinquieme': 'roy'}
11 17/10/2024
Définition et utilisation des fonctions
• Composition arguments positionnels et mots-clés :
Les arguments du mot-clé ne peuvent pas être déclarés avant les arguments
positionnels, donc le code suivant n’est pas accepté par l’interpréteur :
def save_ranking(** kwargs, *args):
print(args)
print(kwargs)
SyntaxError: invalid syntax
12 17/10/2024
Définition et utilisation des fonctions
• Gestion des valeurs de retour :
En Python, une fonction peut renvoyer en retour :
• Aucune valeur
• Une seule valeur
• Plusieurs valeurs
• Une fonction (en Python une variable peut référencer une fonction)
13 17/10/2024
Définition et utilisation des fonctions
• Retourner plusieurs valeurs :
def division(x, y):
reste = x % y
div = x / y
return reste,div
resultat = division(5,3)
(2, 1.6666666666666667)
print(f"Reste : {resultat[0]}, Division : {resultat[1]:.3f}")
Reste : 2, Division : 1.667
14 17/10/2024
Définition et utilisation des fonctions
• Retourner une fonction :
# déclaration de fonctions # appel de fonctions
def f(x) : h(f, 3)
return 2*x+1 # 7
h(g, 4)
def g(x) : # 2
return x//2
def h(fonc, x) :
return fonc(x)
15 17/10/2024
Définition et utilisation des fonctions
• Fonctions anonymes lambda :
Issue de langages fonctionnels (comme Lisp), la directive lambda permet de définir
un objet fonction anonyme dont le bloc d’instructions est limité à une expression dont
l’évaluation fournit la valeur de retour de la fonction.
L'opérateur lambda ou la fonction lambda est un moyen de créer de petites fonctions
anonymes, c'est-à-dire des fonctions sans nom. Ces fonctions sont des fonctions
jetables, c'est-à-dire qu'elles sont simplement nécessaires là où elles ont été créées.
Les fonctions Lambda sont principalement utilisées en combinaison avec les
fonctions filter (), map () et reduce ().
Syntaxe :lambda [parameters] :expression
16 17/10/2024
Définition et utilisation des fonctions
• Fonctions lambda :
Par exemple cette fonction retourne « s » si son argument est différent de 1, une chaîne
vide sinon :
s = lambda x: "" if x == 1 else "s"
# Appels à la fonction
result1 = s(3) # Retourne 's'
result2 = s(1) # Retourne ''
print(result1) # Affiche: 's'
print(result2) # Affiche: ''
17 17/10/2024
Définition et utilisation des fonctions
• Fonctions lambda :
Autre exemple illustrant différentes utilisations de la fonction lambda. Les fonctions f() et g() sont
équivalentes :
def f(x) :
return x**2
print(f(8)) #64
g = lambda x : x**2
print(g(8))
#64
18 17/10/2024
Définition et utilisation des fonctions
• Les fonctions map, filter et reduce :
La programmation fonctionnelle est un paradigme de programmation qui considère
le calcul en tant qu’évaluation de fonctions mathématiques.
Elle souligne l’application des fonctions, contrairement au modèle de programmation
impérative qui met en avant les changements d’état 1.
Elle repose sur trois concepts : mapping, filtering et reducing qui sont implémentés
en Python par trois fonctions : map(), filter() et reduce().
19 17/10/2024
Définition et utilisation des fonctions
• La fonction map() :
map() applique une fonction à chaque élément d’une séquence et retourne un itérateur.
r = map (func, seq)
Le premier argument func est le nom d'une fonction et le second une séquence (par exemple une
liste) seq. map () applique la fonction func à tous les éléments de la séquence seq.
Avant Python3, map () renvoyait une liste, où chaque élément de la liste des résultats était le
résultat de la fonction func appliquée sur l'élément correspondant de la liste ou du couple "seq".
Avec Python 3, map () renvoie un itérateur.
20 17/10/2024
Définition et utilisation des fonctions
• La fonction map() :
Syntaxe : r = map (func, seq)
# Utilisation de map avec une fonction lambda
resultat = map(lambda x: x, range(10))
# Affichage du type de l'objet retourné par map
print(resultat) # Affiche: <map object at 0x...>
# Conversion de l'objet map en liste pour voir les résultats
liste_resultat = list(resultat)
print(liste_resultat) # Affiche: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
21 17/10/2024
Définition et utilisation des fonctions
• La fonction filter() :
filter() construit et renvoie un itérateur sur une liste qui contient tous les éléments de la
séquence initiale répondant au critère : function(element) == True :
filter() offre une manière élégante de filtrer tous les éléments d'une séquence "séquence", pour
laquelle la fonction retourne Vrai.
En d'autres termes: Le filtre de fonction (f, l) a besoin d'une fonction f comme premier argument. f
doit renvoyer une valeur booléenne, c'est-à-dire True ou False. Cette fonction sera appliquée à
tous les éléments de la liste l. Seulement si f renvoie True, l'élément sera produit par l'itérateur,
qui est la valeur de retour du filtre (fonction, séquence).
22 17/10/2024
Définition et utilisation des fonctions
• La fonction filter() :
Syntaxe : function(element) == True :
# Utilisation de filter avec une fonction lambda
resultat = list(filter(lambda x: x > 4, range(10)))
print(resultat)
# Affiche: [5, 6, 7, 8, 9]
23 17/10/2024
Définition et utilisation des fonctions
• La fonction reduce () :
reduce() est une fonction du module functools. Elle applique de façon cumulative
une fonction de deux arguments aux éléments d’une séquence, de gauche à droite,
de façon à réduire cette séquence à une seule valeur qu’elle renvoie :
24 17/10/2024
Définition et utilisation des fonctions
• La fonction reduce () :
def somme(x, y) :
from functools import reduce
print (x, '+', y)
somme = reduce(lambda x, y: x + y, range(10) )
return x + y
print(somme) # Affiche 45
reduce(somme, [1, 2, 3, 4])
1 + 2
3 + 3
6 + 4
10
25 17/10/2024
Définition et utilisation des fonctions
• La fonction reduce () :
def somme(x, y) :
from functools import reduce
print (x, '+', y)
somme = reduce(lambda x, y: x + y, range(10) )
return x + y
print(somme) # Affiche 45
reduce(somme, [1, 2, 3, 4])
1 + 2
3 + 3
6 + 4
10
26 17/10/2024
Définition et utilisation des fonctions
• Exercice 3.1:
Ecrire un programme qui peut filtrer les nombres pairs dans une liste en utilisant la fonction de
filtre.
La liste est: [1,2,3,4,5,6,7,8,9,10].
Astuces:
• Utilisez filter () pour filtrer certains éléments d'une liste.
• Utilisez lambda pour définir les fonctions anonymes.
27 17/10/2024
Définition et utilisation des fonctions
• Exercice 3.2:
Ecrire un programme qui utilise map() pour créer une nouvelle liste dont les éléments sont
les carrés d'éléments dans [1,2,3,4,5,6,7,8,9,10].
Astuces:
• Utilisez map () pour générer une liste.
• Utilisez lambda pour définir les fonctions anonymes.
28 17/10/2024
Définition et utilisation des fonctions
• Exercice 3.3:
Ecrire un programme qui peut mapper et filtrer pour créer une liste dont les éléments sont les
carrés des nombres pairs de la liste [1,2,3,4,5,6,7,8,9,10].
Astuces:
• Utilisez map () pour générer une liste.
• Utilisez filter () pour filtrer les éléments d'une liste.
• Utilisez lambda pour définir les fonctions anonymes.
29 17/10/2024
Définition et utilisation des fonctions
• Solution exercice 3.1:
# Liste initiale
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Utilisation de filter avec une fonction lambda pour obtenir les nombres pairs
nombres_pairs = list(filter(lambda x: x % 2 == 0, nombres))
# Affichage du résultat
print("Nombres pairs :", nombres_pairs)
# Résultat
Nombres pairs : [2, 4, 6, 8, 10]
30 17/10/2024
Définition et utilisation des fonctions
• Solution exercice 3.2:
# Liste initiale
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Utilisation de map avec une fonction lambda pour calculer les carrés
carrés = list(map(lambda x: x ** 2, nombres))
# Affichage du résultat
print("Carrés des nombres :", carrés)
# Résultat
Carrés des nombres : [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
31 17/10/2024
Définition et utilisation des fonctions
• Solution exercice 3.3:
# Liste initiale
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Filtrer les nombres pairs et calculer leurs carrés
carrés_pairs = list(map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, nombres)))
# Affichage du résultat
print("Carrés des nombres pairs :", carrés_pairs)
# Résultat
Carrés des nombres pairs : [4, 16, 36, 64, 100]
32 17/10/2024
Modules intégrés et bibliothèques standards
• Notion de module :
▪ Un programme Python est généralement composé de plusieurs fichiers sources, appelés
modules.
▪ S’ils sont correctement codés les modules doivent être indépendants les uns des autres
pour être réutilisés à la demande dans d’autres programmes.
▪ Un package qui permet de grouper plusieurs modules.
33 17/10/2024
Modules intégrés et bibliothèques standards
• Notion de module :
Module : fichier script Python permettant de définir des éléments de programme
réutilisables. Ce mécanisme permet d’élaborer efficacement des bibliothèques de
fonctions ou de classes.
Avantages des modules :
• réutilisation du code ;
• la documentation et les tests peuvent être intégrés au module ;
• réalisation de services ou de données partagés ;
• partition de l’espace de noms du système.
Lorsqu’on parle du module, on omet l’extension : le module math est dans le fichier
[Link] ou [Link].
[Link]
34 17/10/2024
Modules intégrés et bibliothèques standards
• Les types d'import :
L’instruction import charge et exécute le module indiqué s’il n’est pas déjà chargé.
L’ensemble des définitions contenues dans ce module deviennent alors
disponibles : variables globales, fonctions, classes.
Suivant la syntaxe utilisée, on accède aux définitions du module de différentes
façons :
1. l’instruction import <nom_module> donne accès à l’ensemble des définitions
du module importé en utilisant le nom du module comme espace de nom :
import math
La fonction dir() permet de lister l’ensemble des noms d’un module.
dir (math)
35 17/10/2024
Modules intégrés et bibliothèques standards
• Les types d'import :
2. l’instruction from <nom_module> import nom1, nom2. . . donne accès
directement à une sélection choisie de noms définis dans le module :
from math import pi, sin
Il est conseillé d’importer dans l’ordre :
• les modules de la bibliothèque standard;
• les modules des bibliothèques tierces ;
• Les modules personnels.
36 17/10/2024
Modules intégrés et bibliothèques standards
• Module principal :
Le module principal est celui qui est donné en argument sur la ligne de commande ou qui
est lancé en premier lors de l’exécution d’un script. Son nom est contenu dans la variable
globale __name __. Sa valeur dépend du contexte de l’exécution.
Soit le module « je_me_nomme » matérialisé par le fichier « je_me_nomme.py » :
#je_me_nomme.py
print("Je me nomme :", name )
37 17/10/2024
Modules intégrés et bibliothèques standards
• Module principal :
Premier contexte exécution sur la ligne de commande (ou dans un EDI), on obtient la
valeur prédéfinie
main :
$ python3 je_me_nomme.py
Je me nomme : main
Second contexte import de ce module (ce n’est donc plus le module principal ), on
obtient l’identificateur du module :
>>> import je_me_nomme
Je me nomme : je_me_nomme
38 17/10/2024
Modules intégrés et bibliothèques standards
• Module principal :
Grâce à un test, on peut donc facilement savoir si le code est exécuté en tant que script
principal :
on écrit un script de fonctions ou de classes (souvent appelé bibliothèque) et on termine
le fichier par un test, l’« auto-test », pour vérifier que l’on est dans le module principal. On
en profite pour vérifier tous les éléments de la bibliothèque ;
quand on importe le script, le test inclus est faux et on se borne à utiliser la bibliothèque.
Est-ce que l’ «auto-test », s’exécute lors de l’appel du module ?
39 17/10/2024
Modules intégrés et bibliothèques standards
• Module principal :
# cube_m.py def cube(x) :
"""retourne le cube de <x>.""" return x**3
# auto-test
if name == " main " : # vrai car module principal
assert cube(2) == 8, "Test échoué : 2 ** 3 devrait être 8" # assert condition, message
print("OK !") if cube(9) == 729 else "KO !"
40 17/10/2024
Modules intégrés et bibliothèques standards
• Module principal :
import cube_m
# programme principal
for i in range(1, 4):
print("cube de", i, "=", cube_m.cube(i))
cube de 1 = 1
cube de 2 = 8
cube de 3 = 27
41 17/10/2024
Les espaces de noms
Portée : les noms des objets sont créés lors de leur première affectation, mais ne sont visibles que
dans certaines régions de la mémoire.
On distingue :
La portée globale : celle du module ou du fichier script en cours. Un dictionnaire gère les objets
globaux : l’instruction globals() fournit un dictionnaire contenant les couples variable: valeur ;
La portée locale : les objets internes aux fonctions sont locaux. Les objets globaux ne sont pas
modifiables dans les portées locales. L’instruction locals() fournit un dictionnaire contenant les couples
variable:valeur.
42 17/10/2024
Les espaces de noms
La recherche des noms est d’abord locale (L), puis globale (G), enfin interne (I).
Interne
Global
Local
Noms Nom s affectés
prédéfinis : à la base d’un
open,len module
Nom s déclarés Nom s définis dans la définition d’une fonction
global dans
une fonction
43 17/10/2024
Les espaces de noms
• Portée :
Par défaut, toute variable utilisée dans le corps d’une fonction est locale à celle-ci.
Si une fonction a besoin de modifier certaines variables globales, la première
instruction de cette fonction doit être :
global <identificateurs>
44 17/10/2024
La bibliothèque standard
On dit souvent que Python est livré « piles comprises » (batteries included) tant sa
bibliothèque standard, riche de plus de 200 packages et modules, répond aux
problèmes courants les plus variés.
45 17/10/2024
La bibliothèque standard
• Quelques Modules Python :
46 17/10/2024
La bibliothèque standard
• Quelques Modules Python :
Quelques exemples de modules :
• La gestion des chaînes de caractères
• La gestion de la ligne de commande
• Math
• La gestion de la date
import sys
print([Link]())
help('modules')
47 17/10/2024
La bibliothèque standard
• Modules de gestion des chaînes :
Le module string fournit des constantes comme ascii_lowercase, digits … ainsi que
la classe Formatter qui peut être spécialisée en sous-classes de formateurs de
chaînes.
Le module textwrap est utilisé pour formater un texte : longueur de chaque ligne,
contrôle de l’indentation.
Le module struct permet de convertir des nombres, booléens et des chaînes en leur
représentation binaire afin de communiquer avec des bibliothèques de bas-niveau
(souvent en C).
Le module difflib permet la comparaison de séquences et fournit des sorties au
format standard « diff » ou en HTML.
Le module re permet de manipuler des expressions régulières.
48 17/10/2024
La bibliothèque standard
• Module de gestion de la ligne de commande :
Pour gérer la ligne de commande, Python propose l’instruction [Link]. Il s’agit simplement
d’une liste contenant les arguments de la ligne de commande .
Par exemple, on veut copier un fichier avec un facteur de réplication (r) de son contenu. Si r == 3,
on copie le contenu 3 fois. En mode commande l’appel se fait comme suit :
python3 copy_fichier –r3 [Link] [Link]
script option argument1 argument2
49 17/10/2024
La bibliothèque standard
• Le module math :
Python possède la bibliothèque math :
import math
[Link] / math.e
=e=n→∞lim(1+n1)nn=0∑∞n!1
1.1557273497909217
50 17/10/2024
La bibliothèque standard
• Modules de gestion de la date :
Les modules calendar, time et datetime fournissent les fonctions courantes de gestion du temps et des durées:
import calendar, datetime, time
moon_apollo11 = [Link](1969, 7, 20, 20, 17, 40)
print(moon_apollo11)
print([Link]([Link](0)))
# Thu Jan 01 00:00:00 1970 ("epoch" UNIX)
vendredi_precedent = [Link]()
un_jour = [Link](days=1)
while vendredi_precedent.weekday() != [Link] :
vendredi_precedent -= un_jour
print(vendredi_precedent.strftime("%A, %d-%b-%Y"))
# Friday, 09-Oct-2009
51 17/10/2024
La bibliothèque standard
• Exercice 4 :
4. Mise en œuvre d’un module et manipulation du module dans un programme en Python.
Créer un module calendrier. Ce module permettra de créer un module en français équivalent au module
calender. Il permettra d’écrire [Link] au lieu de [Link].
Modifier l’exemple précédent pour utiliser le module calendrier que vous venez de créer.
52 17/10/2024
Merci