vitesse_moteur = 1500 # explicite : on sait immediatement ce que c'esttemperature_max = 80.5x = 1500 # a eviter : aucune info sur le contenuest_actif = True # les booleens commencent souvent par est_/a_/peut_def calculer_vitesse(): # verbe + snake_case passdef vitesse(): # a eviter : ressemble a une variable, pas a une action passVITESSE_MAX = 3000 # constante : valeur fixe du programmeTIMEOUT_SECONDES = 30class MoteurAsynchrone: # PascalCase pour les classes passdef addition(a: int, b: int) -> int: return a + bnom: str = "Alice" # annotation directement sur une variableactif: bool = Truefrom typing import Optional, Uniondef chercher(nom: str) -> Optional[int]: # Optional[int] = int OU None (si rien n'est trouve) return Nonedef convertir(valeur: Union[int, float]) -> float: # Union[int, float] = accepte un int OU un float return float(valeur)def liste_noms() -> list[str]: # depuis Python 3.9, list[str] remplace List[str] return ["Alice", "Bob"]def division(a: float, b: float) -> float: """Retourne le resultat de a / b.""" return a / bhelp(division) # affiche la docstring dans la consoledef diviser(a: float, b: float) -> float: """Divise a par b. Args: a: Le numerateur. b: Le denominateur (doit etre different de 0). Returns: Le resultat de la division. Raises: ZeroDivisionError: si b vaut 0. """ return a / b# fichier test_calculs.pydef addition(a, b): return a + bdef test_addition(): assert addition(2, 3) == 5 # le test echoue si l'assertion est fausse# executer les tests :# pytest test_calculs.py -vimport pytest@pytest.mark.parametrize("a, b, resultat", [ (2, 3, 5), (0, 0, 0), (-1, 1, 0),])def test_addition_plusieurs_cas(a, b, resultat): assert addition(a, b) == resultatimport logginglogging.basicConfig(level=logging.INFO) # niveau minimum affichelogging.debug("Detail technique") # non affiche (en dessous du niveau INFO)logging.info("Demarrage du programme") # affichelogging.warning("Valeur inhabituelle") # affichelogging.error("Erreur rencontree") # afficheimport logginglogger = logging.getLogger(__name__) # __name__ = nom du fichier/module courantlogger.info("Connexion etablie")logger.error("Echec de connexion")# avec une boucle classiquecarres = []for x in range(1000): carres.append(x * x)# equivalent en list comprehension (plus rapide)carres = [x * x for x in range(1000)]carres_liste = [x * x for x in range(1_000_000)] # tout en memoire d'un coupcarres_gen = (x * x for x in range(1_000_000)) # calcule au fur et a mesurefor valeur in carres_gen: if valeur > 100: break # arret immediat, le reste n'est jamais calculeids_valides = [1, 2, 3, 4, 5] # liste : recherche lente sur gros volumeids_valides_set = {1, 2, 3, 4, 5} # set : recherche quasi instantaneeif 3 in ids_valides_set: # tres rapide, meme avec des milliers d'elements print("trouve")