Volume 3 : Manuel Complet de Python — Syntaxe Moderne, POO & Algorithmes/Module 1 : Syntaxe Moderne, Typage PEP 484 & Collections
Python Moderne 3.12+ : Typage Statique, Match-Case & Structures
Python Moderne 3.12+ : Typage PEP 484, Pattern Matching & Collections
Issu des Parties I, II et III du Manuel Complet de Python, ce cours vous initie aux pratiques d'ingénierie logicielle contemporaines de Python 3.12+. En cybersécurité comme en développement d'API, l'écriture de code typé, prévisible et robuste est une exigence absolue.
---
1. Le Typage Statique Optionnel (PEP 484 & PEP 526)
Python demeure un langage à typage dynamique fort, mais les annotations de types permettent d'éliminer des catégories entières de bogues avant l'exécution grâce aux analyseurs statiques (
mypy, pyright) :``
python
from typing import Final, Optional
from dataclasses import dataclass
Constante immuable avec type explicite
MAX_TENTATIVES_AUTH: Final[int] = 5
@dataclass(frozen=True)
class ReglePareFeu:
port: int
protocole: str
action: str # 'ALLOW' ou 'DENY'
description: Optional[str] = None
def evaluer_regle(paquet_port: int, regle: ReglePareFeu) -> bool:
"""Retourne True si le paquet est autorisé par la règle."""
if paquet_port == regle.port and regle.action == "ALLOW":
return True
return False
`
---
2. Le Structural Pattern Matching (
match / case introduit en Python 3.10)
Le match/case remplace avantageusement les longues séries de if / elif / else en permettant la déconstruction directe des structures d'objets, de dictionnaires ou de tuples :
`python
def analyser_reponse_serveur(reponse: dict[str, any]) -> str:
match reponse:
case {"status": 200, "data": {"user_id": uid, "role": "admin"}}:
return f"[+] Administrateur authentifié : ID={uid}"
case {"status": 200, "data": {"user_id": uid}}:
return f"[+] Utilisateur standard connecté : ID={uid}"
case {"status": 401 | 403, "error": message}:
return f"[!] Échec d'autorisation : {message}"
case {"status": int(code), "error": message} if code >= 500:
return f"[CRITICAL] Erreur serveur interne ({code}) : {message}"
case _:
return "[?] Format de réponse réseau non reconnu."
`
---
3. Les Collections Optimisées de la Bibliothèque Standard
Le module collections fournit des conteneurs hautement performants :
* collections.deque : File à double extrémité avec insertion et suppression en temps constant $O(1)$ à gauche comme à droite (contrairement aux listes Python ordinaires où list.pop(0) s'exécute en $O(n)$).
* collections.Counter : Idéal pour compter les fréquences d'adresses IP ou de mots de passe lors de l'analyse forensique de logs.
* collections.defaultdict : Dictionnaire évitant les erreurs KeyError en générant automatiquement une valeur par défaut.
Exemple de calcul des 3 adresses IP les plus agressives dans un flux de logs :
`python
from collections import Counter
logs_ips = [
"192.168.1.50", "10.0.0.1", "192.168.1.50", "185.220.101.5",
"192.168.1.50", "185.220.101.5", "10.0.0.1", "192.168.1.50"
]
compteur = Counter(logs_ips)
print("[*] Top 2 des adresses les plus fréquentes :")
for ip, occurrences in compteur.most_common(2):
print(f" - IP {ip} : {occurrences} requêtes")
``
Informations
Formatarticle
Durée45 min
StatutEn cours
Laboratoire Virtuel Pratique
Pratiquez cette le?on dans le Terminal Linux et l'ex?cuteur WebAssembly Python en direct.
Ouvrir dans le Labo >_