Aller au contenu

Fonctions globales et modules

Avant d’aller plus loin, prenons un moment pour bien comprendre comment fonctionne un appel de fonction comme print("Bonjour", nom), int(input("Âge: ")) ou round(22.857, 2).

Une fonction est un bloc de code préfabriqué qui effectue une opération. C’est comme un template qu’on peut réutiliser au sein de notre propre code. Une fonction encapsule un comportement.
Pour l’utiliser, on l’appelle en écrivant son nom suivi de parenthèses. Si elle recquiert des entrées, celles-ci sont listées entre les parenthèses.

round(22.857, 2)
round( 22.857, 2 )
│ │ │
│ │ └── 2e argument (valeur passée au 2e paramètre - ndigits)
│ └──────── 1er argument (valeur passée au 1er paramètre - number)
└──────────────── nom de la fonction

Cet appel retournera la valeur 22.86.

Ces deux termes sont souvent confondus, mais ils désignent des choses différentes :

  • Un paramètre, c’est la « boîte vide » définie par la fonction pour recevoir une entrée.
  • Un argument, c’est la valeur concrète que tu passes au paramètre lors de l’appel. Dans l’exemple ci-dessous deux arguments sont passés à la fonction round.
# argument 1 argument 2
# ↓ ↓
resultat = round(22.857, 2)
# ↑ ↑
# paramètre 1 paramètre 2
# (nombre) (ndigits)

On peut passer comme argument une valeur littérale, une variable ou même directement le résultat d’un appel de fonction :

age = "25"
int("20") # Valeur littérale
int(age) # Variable
int(input("Age: ")) # Résultat d'une fonction

Certaines fonctions retournent une valeur : elles produisent un résultat que tu peux stocker dans une variable ou utiliser dans une expression.

# round() retourne un nombre → on le stocke dans resultat
resultat = round(22.857, 4)
print(resultat) # 22.86
# On peut aussi utiliser le retour directement
print("IMC :", format(round(22.857, 2), ".2f"))

Certaines fonctions effectuent une action sans produire de valeur.
C’est le cas de print() : elle affiche du texte à l’écran, mais ne retourne rien d’utile. Si nous essayons de stocker le résultat de l’appel (valeur retournée par la fonction) à print, nous obtenons la valeur None. La valeur spéciale None signifie « rien ».

resultat = print("Bonjour") # Affiche 'Bonjour'
print(resultat) # Affiche None
flowchart LR
    A["Arguments<br/>(valeurs en entrée)"] --args--> FONCTION
    subgraph FONCTION ["Fonction"]
        direction LR
        subgraph CORPS["Corps de la fonction"]
            direction TB
            I1["Instructions internes"] --> I2["Calculs, if-else,<br/>while, appels, ..."]
        end
    end
    FONCTION --> C["Valeur de retour<br/>(résultat en sortie)"]

    style FONCTION fill:#fef3c7,stroke:#f59e0b
    style CORPS fill:#fff7ed,stroke:#fb923c,stroke-dasharray: 5 5

Chaque fonction reçoit des arguments en entrée, effectue une opération qui peut produire un effet visible par l’utilisateur (ex: print), et peut retourner une valeur.


Jusqu’à présent, on a utilisé des fonctions sans se poser la question de leur provenance :

nom = input("Ton nom : ") # Lire une saisie
age = int("22") # Convertir en entier
prix = float("9.99") # Convertir en décimal
imc = round(22.857, 2) # Arrondir un nombre
texte = format(22.857, ".2f") # Formater pour l'affichage
print("Bonjour", nom) # Afficher à l'écran

Ces fonctions sont dites globales (ou built-in) : elles sont disponibles partout et peuvent être appelées en tout temps, sans rien faire de spécial. Python les charge automatiquement au démarrage du programme.

Les fonctions globales que tu connais déjà ou presque

Section intitulée « Les fonctions globales que tu connais déjà ou presque »
FonctionRôleExemple
print()Afficher à l’écranprint("Bonjour")
input()Lire une saisie (retourne un str)input("Nom : ")
int()Convertir en entierint("42")42
float()Convertir en nombre décimalfloat("3.14")3.14
str()Convertir en chaîne de caractèresstr(42)"42"
bool()Convertir en booléenbool(0)False, bool(1)True
abs()Valeur absolue d’un nombreabs(-5)5
round()Arrondir un nombreround(3.14159, 2)3.14
format()Formater une valeur pour l’affichageformat(22.86, ".2f")"22.86"
type()Connaître le type d’une valeurtype(42)<class 'int'>
isinstance()Vérifier le type d’une valeurisinstance(42, int)True
FonctionRôleExemple
len()Connaître la longueur d’une séquencelen("Bonjour")7
ord()Code numérique d’un caractèreord("A")65
chr()Caractère correspondant à un codechr(65)"A"
min()Plus petite valeurmin(3, 7, 1)1
max()Plus grande valeurmax(3, 7, 1)7
pow()Puissance (comme **)pow(2, 10)1024

Les fonctions globales couvrent des besoins courants. Cependant, elles sont loin de suffire pour réaliser toutes les tâches d’un programme réel.

Considère les situations suivantes :

  • Trouver le PGCD entre deux nombres → pas de fonction globale pour ça
  • Générer un nombre aléatoire → pas de fonction globale
  • Envoyer une requête HTTP → pas de fonction globale
  • Lire ou écrire un fichier CSV → pas de fonction globale
  • Effectuer une opération toutes les 10 secondes → pas de fonction globale

Aucune de ces fonctionnalités n’est disponible directement dans l’espace global.

La solution qu’offre Python: organiser les fonctions supplémentaires dans des modules qu’on peut récupérer au besoin. Cela permet de ne pas surcharger l’espace global, d’organiser le code par domaine et de charger uniquement ce qui est nécessaire.


Un module est un fichier Python qui regroupe des fonctions et des constantes autour d’un même thème. C’est comme une boîte à outils spécialisée :

Module math

import math

Donne accès a des fonctions mathématiques avancées et constantes fondamentales:
sqrt, sin, cos,log, pi, etc.

Module random

import random

Donne accès a des fonctions permettant de générer des valeurs aléatoires:
randint, choice, shuffle, etc.

Les fonctions globales sont toujours disponibles. Les modules, eux, doivent être importés avec l’instruction import avant d’être utilisés.

Par convention, les import se placent toujours au début du fichier, avant tout le reste du code :

import math
import random
print("=== MON PROGRAMME ===")
nombre = random.randint(1, 100)
racine = math.sqrt(nombre)
print(nombre, "→ racine :", format(racine, ".2f"))

Le module math contient les fonctions mathématiques avancées et les constantes fondamentales.

FonctionDescriptionExempleRésultat
math.sqrt(x)Racine carréemath.sqrt(25)5.0
math.pow(x, y)Puissance (xyx^y)math.pow(2, 10)1024.0
math.ceil(x)Arrondi vers le hautmath.ceil(3.2)4
math.floor(x)Arrondi vers le basmath.floor(3.8)3
math.log(x)Logarithme naturel (ln)math.log(math.e)1.0
math.log10(x)Logarithme en base 10math.log10(1000)3.0
math.sin(x)Sinus (x en radians)math.sin(math.pi / 2)1.0
math.cos(x)Cosinus (x en radians)math.cos(0)1.0
math.radians(x)Degrés → radiansmath.radians(180)3.14159...
math.degrees(x)Radians → degrésmath.degrees(math.pi)180.0
math.factorial(n)Factorielle (n!n!)math.factorial(5)120
math.gcd(a, b)Plus grand commun diviseurmath.gcd(12, 8)4
ConstanteValeurDescription
math.pi3.141592653589793Le nombre π
math.e2.718281828459045Le nombre d’Euler
math.infinfL’infini
import math
rayon = float(input("Rayon du cercle : "))
aire = math.pi * rayon ** 2
circonference = 2 * math.pi * rayon
print("Aire :", format(aire, ".2f"))
print("Circonférence :", format(circonference, ".2f"))
Rayon du cercle : 5
Aire : 78.54
Circonférence : 31.42

Le module random permet de générer des valeurs aléatoires; très utile pour les jeux, les simulations et les tests.

FonctionDescriptionExemple
random.randint(a, b)Entier aléatoire entre a et b (inclus)random.randint(1, 6) → un dé
random.random()Décimal aléatoire entre 0.0 et 1.0random.random()0.7341...
random.uniform(a, b)Décimal aléatoire entre a et brandom.uniform(1.5, 9.5)
random.choice(seq)Choisir un élément au hasardrandom.choice(["pile", "face"])
import random
print("=== LANCER DE DÉ ===")
de = random.randint(1, 6)
print("Tu as obtenu :", de)
if de == 6:
print("Bravo, c'est le maximum !")
=== LANCER DE DÉ ===
Tu as obtenu : 4

Exemple : génération d’un code de vérification

Section intitulée « Exemple : génération d’un code de vérification »
import random
code = random.randint(1000, 9999)
print("Ton code de vérification est :", code)
Ton code de vérification est : 4821

Dans les exemples précédents, nous avons utilisé l’instruction import sous sa forme de base. Cependant, en Python, il existe plusieurs façons d’importer un module, offrant chacun des avantages.

import math
print(math.sqrt(25)) # 5.0
print(math.pi) # 3.141592653589793

C’est la forme la plus courante et celle recommandée. Chaque fonction est préfixée par le nom du module (math.sqrt), ce qui rend le code clair : on sait d’où vient chaque fonction.

from math import sqrt, pi
print(sqrt(25)) # 5.0
print(pi) # 3.141592653589793

On importe seulement les fonctions dont on a besoin, directement dans l’espace de noms. Plus besoin du préfixe math., mais on perd la traçabilité : en lisant sqrt(25), on ne voit plus immédiatement que ça vient du module math.

import random as rd
de = rd.randint(1, 6)
print("Dé :", de)

On donne un surnom (alias) au module pour raccourcir l’écriture. Très courant avec les bibliothèques scientifiques que tu verras plus tard (ex: numpynp).

On peut aussi renommer une fonction spécifique :

from math import sqrt as racine
print(racine(25)) # 5.0

En règle générale :

  • import module quand tu utilises beaucoup de fonctions du module → le préfixe clarifie l’origine
  • from module import ... quand tu n’utilises qu’une ou deux fonctions → évite le préfixe répétitif
  • import module as alias quand le nom du module est long → raccourci pratique

La bibliothèque standard de Python couvre les besoins généraux. Mais pour l’expérimentation et les calculs en sciences, l’analyse de données et la visualisation, la communauté Python a développé des bibliothèques externes extrêmement puissantes. On les découvrira dans les semaines à venir.

NumPy

NumPy est une bibliothèque utilisé pour faire du calcul scientifique et numérique haute performance : tableaux multidimensionnels, algèbre linéaire, statistiques. En sciences, NumPy est essentiel pour traiter de grandes quantités de données numériques.

import numpy as np

Matplotlib

Matplotlib est une bibliothèque utilisée pour créer des graphiques et visualisations : courbes, histogrammes, nuages de points, diagrammes en barres. Elle sert à représenter visuellement des résultats.

import matplotlib.pyplot as plt

flowchart TD
    A["Fonctions en Python"] --> B["Fonctions globales<br/>(built-in)"]
    A --> C["Modules de la<br/>bibliothèque standard"]
    A --> D["Bibliothèques<br/>externes"]
    B --> B1["print, input, int,<br/>float, round, format, ..."]
    C --> C1["math, random, time,<br/>os, csv, json, ..."]
    D --> D1["NumPy, Matplotlib,<br/>Pandas, SciPy, ..."]

    style B fill:#dbeafe,stroke:#3b82f6
    style C fill:#fef3c7,stroke:#f59e0b
    style D fill:#f3e8ff,stroke:#a855f7
CatégorieDisponibilitéExemples
Fonctions globalesToujours disponibles, aucun importprint, input, round
Bibliothèque standardLivrée avec Python, nécessite un importmath, random, time
Bibliothèques externesÀ installer séparément avec pipNumPy, Matplotlib