Contenu du cours
Concepts Avancés de Python
Concepts Avancés de Python
Exemples Pratiques de Generators
Les générateurs peuvent être utilisés comme des gestionnaires de contexte légers pour gérer efficacement les ressources, telles que les connexions à la base de données, les opérations sur les fichiers ou les mécanismes de verrouillage. Avec le module contextlib
, les générateurs peuvent gérer l'allocation et le nettoyage des ressources de manière transparente.
from contextlib import contextmanager @contextmanager def database_connection(): print("Opening database connection") connection = "Database Connection" # Simulated connection try: yield connection finally: print("Closing database connection") # Using the generator as a context manager with database_connection() as conn: print(f"Using {conn}")
Traitement efficace des grandes quantités de données
Les générateurs sont idéaux pour construire des pipelines de données qui traitent de grands ensembles de données de manière paresseuse. Chaque étape du pipeline peut être implémentée comme un générateur, permettant un traitement efficace et économe en mémoire.
import re # Stage 1: Read lines lazily def read_lines(text): for line in text.split("\n"): yield line # Stage 2: Filter non-empty lines def filter_lines(lines): for line in lines: if line.strip(): yield line # Stage 3: Extract words lazily def extract_words(lines): for line in lines: for word in re.findall(r'\w+', line): yield word # Stage 4: Transform words to lowercase def lowercase_words(words): for word in words: yield word.lower() # Input text text = """Generators are powerful tools They allow efficient data processing This pipeline demonstrates their usage""" # Build the pipeline lines = read_lines(text) filtered = filter_lines(lines) words = extract_words(filtered) lowercased = lowercase_words(words) # Process the data print("Processed words:") for word in lowercased: print(word)
1. Que se passe-t-il lorsqu'une fonction génératrice n'a plus de valeurs à yield
?
2. Quelle sera la sortie du code suivant ?
3. Que fait le code suivant ?
Tout était clair ?
Merci pour vos commentaires !
Section 6. Chapitre 5