Python : Niveau Intermédiaire
Approfondissez vos connaissances et écrivez du code "Pythonic" efficace.
Args, Kwargs et Lambdas
# *args pour une liste variable d'arguments positionnels
def addition(*nombres):
return sum(nombres)
# **kwargs pour des arguments par mot-clé
def infos_user(**details):
for k, v in details.items():
print(f"{k}: {v}")
infos_user(nom="WinnyKing", role="Admin")
# Lambdas (Fonctions anonymes)
# Utile pour les fonctions courtes comme avec map() ou filter()
carre = lambda x: x**2
nombres = [1, 2, 3, 4]
doubles = list(map(lambda x: x * 2, nombres))
Rapidité et Lisibilité
Créez des listes, dictionnaires ou sets en une seule ligne.
nombres = [1, 2, 3, 4, 5, 10]
# List Comprehension
carres_pairs = [x**2 for x in nombres if x % 2 == 0]
# Dict Comprehension
carres_dict = {x: x**2 for x in nombres}
# Generator Expression (Économe en mémoire)
carres_gen = (x**2 for x in nombres)
Robustesse du code
try:
# Code susceptible de lever une exception
resultat = 10 / int(input("Diviseur : "))
except ZeroDivisionError:
print("Erreur : Division par zéro !")
except ValueError:
print("Erreur : Entrée invalide !")
except Exception as e:
print(f"Erreur inattendue : {e}")
else:
print(f"Résultat : {resultat}")
finally:
print("Exécuté quoi qu'il arrive (nettoyage...)")
Classes, Encapsulation et Propriétés
Allez au-delà des simples données et créez de véritables objets intelligents.
class CompteBancaire:
def __init__(self, titulaire, solde_initial):
self.titulaire = titulaire
self.__solde = solde_initial # Attribut privé (Name Mangling)
@property # Getter
def solde(self):
return f"{self.__solde} €"
@solde.setter # Setter
def solde(self, valeur):
if valeur >= 0:
self.__solde = valeur
else:
print("Solde ne peut pas être négatif")
def deposer(self, montant):
if montant > 0:
self.__solde += montant
compte = CompteBancaire("WinnyKing", 1000)
compte.deposer(500)
print(compte.solde)
Gestion efficace de la mémoire
Les générateurs ne chargent pas tout en mémoire d'un coup. Ils utilisent le mot-clé yield.
def compte_a_rebours(n):
while n > 0:
yield n
n -= 1
for val in compte_a_rebours(5):
print(val)
Manipulation de l'OS et des données
- pathlib : Manipulation moderne des chemins.
- json : Échanges de données.
- csv : Lecture/Écriture de tableurs.
import json
from pathlib import Path
data = {"nom": "WinnyKing", "score": 100}
Path("config.json").write_text(json.dumps(data))
Stocker des données de manière persistante
Python inclut sqlite3 par défaut, parfait pour les petits projets et le développement.
import sqlite3
# Connexion (crée le fichier s'il n'existe pas)
conn = sqlite3.connect("ma_base.db")
cursor = conn.cursor()
# Création de table
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, nom TEXT)")
# Insertion sécurisée (prévention injections SQL)
cursor.execute("INSERT INTO users (nom) VALUES (?)", ("WinnyKing",))
conn.commit()
# Récupération
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
conn.close()