Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Effiziente Zeichenfolgenoperationen | Leistungssteigerung mit Integrierten Werkzeugen
Optimierungstechniken in Python
course content

Kursinhalt

Optimierungstechniken in Python

Optimierungstechniken in Python

1. Verstehen und Messen der Leistung
2. Effiziente Nutzung von Datenstrukturen
3. Leistungssteigerung mit Integrierten Werkzeugen

book
Effiziente Zeichenfolgenoperationen

Effiziente Zeichenkettenverkettung

Beim Arbeiten mit vielen Zeichenketten ist es wichtig, die effizienteste Methode zur Verkettung zu verwenden. Die wiederholte Verwendung des + (+=) Operators ist für große Datensätze ineffizient, da jedes Mal eine neue Zeichenkette erstellt wird. Stattdessen ist die Verwendung von str.join() viel schneller und speichereffizienter.

Lassen Sie uns die Leistung von zwei Ansätzen zum Verketten von Zeichenketten mit Zeilenumbrüchen in eine einzelne Zeichenkette vergleichen. Der erste verwendet eine for-Schleife mit dem += Operator, während der zweite die effizientere str.join() Methode nutzt.

1234567891011121314151617181920212223
import os decorators = os.system('wget https://staging-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

Vorabkompilierung von regulären Ausdrücken

Bei der Arbeit mit regulären Ausdrücken kann die Leistung zu einem Problem werden, insbesondere bei großen Datensätzen oder sich wiederholenden Musterabgleichen. In solchen Fällen ist die Vorabkompilierung des Musters eine nützliche Optimierungstechnik.

Die Vorabkompilierung stellt sicher, dass die Regex-Engine das Muster nicht jedes Mal neu kompiliert, wenn es verwendet wird, was die Leistung erheblich verbessern kann, wenn dasselbe Muster mehrmals über einen Datensatz angewendet wird. Dieser Ansatz ist besonders vorteilhaft in Szenarien wie Filtern, Validierung oder Suche in großen Textdateien.

Vergleichen wir die Leistung von zwei Ansätzen zur Validierung von Benutzernamen mit regulären Ausdrücken. Der erste Ansatz verwendet die re.match-Funktion mit dem Muster, das jedes Mal, wenn es aufgerufen wird, inline definiert ist. Der zweite, effizientere Ansatz kompiliert das Regex-Muster vorab mit re.compile und verwendet es für alle Validierungen erneut.

1234567891011121314151617181920212223
import os import re decorators = os.system('wget https://staging-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. Sie erstellen einen Bericht mit 10000 Zeilen, wobei jede Zeile eine Transaktionszusammenfassung darstellt. Welche Methode ist am effizientesten, um diese Zeilen zu einem einzigen String mit ; dazwischen zu kombinieren?

2. Warum ist das Vorkompilieren eines regulären Ausdrucks mit re.compile() oft schneller als die Verwendung von re.match() mit einem Inline-Muster?

Sie erstellen einen Bericht mit `10000` Zeilen, wobei jede Zeile eine Transaktionszusammenfassung darstellt. Welche Methode ist am effizientesten, um diese Zeilen zu einem einzigen String mit `;` dazwischen zu kombinieren?

Sie erstellen einen Bericht mit 10000 Zeilen, wobei jede Zeile eine Transaktionszusammenfassung darstellt. Welche Methode ist am effizientesten, um diese Zeilen zu einem einzigen String mit ; dazwischen zu kombinieren?

Wählen Sie die richtige Antwort aus

Warum ist das Vorkompilieren eines regulären Ausdrucks mit `re.compile()` oft schneller als die Verwendung von `re.match()` mit einem Inline-Muster?

Warum ist das Vorkompilieren eines regulären Ausdrucks mit re.compile() oft schneller als die Verwendung von re.match() mit einem Inline-Muster?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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