Structurez votre code en fonctions réutilisables, maîtrisez les valeurs par défaut et comprenez la portée des variables.
Ouvrir cette leçon dans KodokonVous savez déjà écrire des boucles et des conditions ; il est temps de structurer votre code. Une fonction isole une tâche précise derrière un nom clair : vous l'écrivez une fois, vous la testez une fois, vous l'appelez partout. def déclare la fonction, les paramètres reçoivent les valeurs d'entrée et return renvoie le résultat à l'appelant. Retenez un point souvent oublié : une fonction sans return renvoie None.
def net_price(price, tax_rate):
total = price * (1 + tax_rate)
return round(total, 2)
result = net_price(100, 0.2)
print(result) # 120.0Les valeurs par défaut rendent une fonction flexible sans multiplier les variantes : déclarez-les après les paramètres obligatoires. À l'appel, les arguments nommés (currency="USD") documentent l'intention. Dans du code professionnel, on les utilise dès qu'une fonction dépasse deux paramètres : l'appel se lit sans ouvrir la définition.
def format_price(amount, currency="EUR", digits=2):
return f"{amount:.{digits}f} {currency}"
print(format_price(19.9)) # 19.90 EUR
print(format_price(19.9, currency="USD")) # 19.90 USD
print(format_price(19.9, digits=0)) # 20 EURdef add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item("pen")) # ['pen']
print(add_item("book")) # ['book']La portée détermine où une variable existe. Une variable créée dans une fonction est locale : elle disparaît à la fin de l'appel. Une fonction peut lire une variable globale, mais toute affectation crée une nouvelle variable locale - la globale reste intacte. Bonne habitude : plutôt que de modifier des globales, passez des paramètres et renvoyez des résultats ; votre code devient prévisible et testable.
rate = 0.2
def apply_tax(price):
return round(price * (1 + rate), 2)
def set_rate(new_rate):
rate = new_rate # variable locale, sans effet
print(apply_tax(100)) # 120.0
set_rate(0.1)
print(apply_tax(100)) # 120.0, la globale est intacte