Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Opérations de Chaîne Efficaces | Améliorer les Performances avec des Outils Intégrés
Techniques d'Optimisation en Python
course content

Contenu du cours

Techniques d'Optimisation en Python

Techniques d'Optimisation en Python

1. Comprendre et Mesurer la Performance
2. Utilisation Efficace des Structures de Données
3. Améliorer les Performances avec des Outils Intégrés

book
Opérations de Chaîne Efficaces

Concatenation de chaînes efficace

Lorsque vous travaillez avec de nombreuses chaînes, il est essentiel d'utiliser la méthode la plus efficace pour la concaténation. Utiliser l'opérateur + (+=) de manière répétée est inefficace pour les grands ensembles de données, car il crée une nouvelle chaîne à chaque fois. Au lieu de cela, utiliser str.join() est beaucoup plus rapide et plus économe en mémoire.

Comparons les performances de deux approches pour concaténer des chaînes avec des caractères de nouvelle ligne en une seule chaîne. La première utilise une boucle for avec l'opérateur +=, tandis que la seconde exploite la méthode plus efficace str.join().

1234567891011121314151617181920212223
import os decorators = os.system('wget https://content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated lines of a report lines = [f"Line {i}" for i in range(1, 1000001)] # Inefficient concatenation @timeit_decorator(number=50) def concat_with_plus(): result = "" for line in lines: result += line + "\n" return result # Efficient concatenation @timeit_decorator(number=50) def concat_with_join(): return "\n".join(lines) + "\n" # Add final newline for consistency result_plus = concat_with_plus() result_join = concat_with_join() print(result_plus == result_join)
copy

Précompilation des Expressions Régulières

Lorsque vous travaillez avec des expressions régulières, la performance peut devenir un problème, surtout lorsqu'il s'agit de grands ensembles de données ou de correspondances de motifs répétitives. Dans de tels cas, précompiler le motif est une technique d'optimisation utile.

La précompilation garantit que le moteur regex ne recompile pas le motif à chaque utilisation, ce qui peut améliorer considérablement la performance lorsque le même motif est appliqué plusieurs fois à travers un ensemble de données. Cette approche est particulièrement bénéfique dans des scénarios tels que le filtrage, la validation ou la recherche dans de grands fichiers texte.

Comparons la performance de deux approches pour valider des noms d'utilisateur en utilisant des expressions régulières. La première approche utilise la fonction re.match avec le motif défini en ligne à chaque appel. La deuxième approche, plus efficace, précompile le motif regex en utilisant re.compile et le réutilise pour toutes les validations.

1234567891011121314151617181920212223
import os import re decorators = os.system('wget https://content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Simulated usernames usernames = ["user123", "admin!@#", "test_user", "invalid!"] * 100000 # Naive approach @timeit_decorator(number=10) def validate_with_re(): pattern = r"^\w+$" return [bool(re.match(pattern, username)) for username in usernames] # Optimized approach @timeit_decorator(number=10) def validate_with_compiled_re(): compiled_pattern = re.compile(r"^\w+$") return [bool(compiled_pattern.match(username)) for username in usernames] result_without_precompiling = validate_with_re() result_with_precompiling = validate_with_compiled_re() print(result_without_precompiling == result_with_precompiling)
copy

1. Vous générez un rapport avec 10000 lignes, où chaque ligne représente un résumé de transaction. Quelle méthode est la plus efficace pour combiner ces lignes en une seule chaîne avec ; entre elles ?

2. Pourquoi la précompilation d'une expression régulière avec re.compile() est-elle souvent plus rapide que l'utilisation de re.match() avec un motif inline ?

Vous générez un rapport avec `10000` lignes, où chaque ligne représente un résumé de transaction. Quelle méthode est la plus efficace pour combiner ces lignes en une seule chaîne avec `;` entre elles ?

Vous générez un rapport avec 10000 lignes, où chaque ligne représente un résumé de transaction. Quelle méthode est la plus efficace pour combiner ces lignes en une seule chaîne avec ; entre elles ?

Sélectionnez la réponse correcte

Pourquoi la précompilation d'une expression régulière avec `re.compile()` est-elle souvent plus rapide que l'utilisation de `re.match()` avec un motif inline ?

Pourquoi la précompilation d'une expression régulière avec re.compile() est-elle souvent plus rapide que l'utilisation de re.match() avec un motif inline ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4
We're sorry to hear that something went wrong. What happened?
some-alt