Réutiliser du code avec import
Un module est un fichier Python dont les noms (fonctions, constantes, classes) peuvent être utilisés par d'autres codes. import math charge le module math de la bibliothèque standard et le rend disponible sous ce nom : on écrit alors math.sqrt(2). Python est livré avec des centaines de modules, et tout ce que vous installerez plus tard (par exemple numpy) s'importe de la même façon. Placez les imports en haut du fichier pour qu'on voie tout de suite de quoi il dépend.
import math
import statistics
# Use a name from a module with module.name
print(math.sqrt(252)) # 15.874507866387544
print(round(math.sqrt(252), 2)) # 15.87
returns = [0.01, -0.02, 0.015, 0.0]
print(round(statistics.stdev(returns), 4)) # 0.0155from ... import et alias
from datetime import date n'apporte qu'un nom, d'où date(2025, 1, 2) sans préfixe. import numpy as np donne un alias plus court à un module, une convention que l'on voit partout. Évitez from module import * : il déverse des noms inconnus dans votre fichier et peut remplacer silencieusement les vôtres. Préférez des noms clairs, et gardez le préfixe quand il rend l'origine évidente.
from datetime import date
from math import sqrt as square_root
import statistics as stats
# Only the names you asked for are imported
start = date(2025, 1, 2)
end = date(2025, 3, 3)
print((end - start).days) # 60
print(square_root(16)) # 4.0
print(stats.mean([1.0, 2.0, 3.0])) # 2.0Vos propres modules
Tout fichier .py est un module. Si fees.py est à côté de main.py et définit commission, alors main.py peut écrire import fees et appeler fees.commission(...). Quand un fichier est lancé directement, Python met son __name__ à "__main__" ; quand il est importé, __name__ est le nom du module. La garde if __name__ == "__main__": fait donc s'exécuter du code seulement quand le fichier est exécuté, pas quand il est importé, ce qui évite aux démos et aux tests de gêner.
# fees.py
RATE = 0.001
def commission(notional):
return notional * RATE
if __name__ == "__main__":
print(commission(10000)) # runs only with: python fees.py
# main.py (next to fees.py)
import fees
print(fees.commission(50000)) # 50.0
print(__name__) # __main__Où Python cherche, et un piège classique
Avec import name, Python cherche d'abord dans le dossier du script exécuté, puis dans la bibliothèque standard et les paquets installés (la liste est sys.path). La première correspondance l'emporte. C'est pourquoi un de vos fichiers nommé random.py ou statistics.py masque le vrai module, et import random charge alors votre fichier et échoue de façon déroutante. Ne nommez jamais vos fichiers comme des modules de la bibliothèque standard. Évitez aussi deux modules qui s'importent mutuellement en haut (import circulaire) ; déplacez la partie commune dans un troisième module.
import sys
import random
# Imported modules are remembered in sys.modules; sys.path is the search list
print("random" in sys.modules) # True
print(random.__name__) # random
print(len(sys.path) > 0) # True
# A quick tour of useful standard-library modules
import collections, datetime, itertools, pathlib
print(collections.Counter("AAPL")["A"]) # 2
print(datetime.date(2025, 1, 2).weekday()) # 3 (Thursday; Monday is 0)datetime, statistics, csv, json, collections, itertools, pathlib). Du code de bibliothèque testé est presque toujours plus sûr qu'une version maison rapide, et le lab signale l'analyse manuelle des dates comme une erreur de technique.import modulepuismodule.name;from module import namepour un nom ;import module as shortpour un alias.- Les imports vont en haut ; évitez
import *. - Ne nommez pas vos fichiers comme des modules standard ; utilisez
if __name__ == "__main__":pour le code qui ne doit s'exécuter que directement.
À suivre : paquets et organisation de projet, comment ranger plusieurs modules en dossiers qui s'importent proprement.
Lab : ce qui est noté
- Mesurer la volatilité avec
daily_vol25 pts - Ramener la volatilité à un an avec
annualize_vol25 pts - Compter les jours entre deux dates avec
days_between25 pts - Distinguer jours ouvrés et week-ends avec
is_business_day25 pts