Auswirkungen auf die Leistung von Pythons re.compile
In Python bietet das re-Modul Funktionen für die Arbeit mit regulären Ausdrücken. Eine häufig gestellte Frage ist, ob die Verwendung der re.compile-Methode zum Vorkompilieren regulärer Ausdrücke einen Leistungsvorteil bringt.
Verwendung von re.compile vs. Direct Matching
Betrachten Sie die folgenden zwei Codeausschnitte:
h = re.compile('hello') h.match('hello world')
re.match('hello', 'hello world')
Der erste Codeausschnitt kompiliert den regulären Ausdruck „hello“ mit re.compile() vor und verwendet dann das kompilierte Muster, um den Abgleich durchzuführen. Das zweite Snippet verwendet einfach die Funktion re.match() direkt, um den Abgleich durchzuführen.
Anekdotische Beweise und Codeanalyse
Einige Benutzer berichten, dass sie keine beobachtet haben erheblicher Leistungsunterschied zwischen der Verwendung von re.compile() und direktem Matching. Dies wird durch die Tatsache unterstützt, dass Python reguläre Ausdrücke intern kompiliert und bei ihrer Verwendung zwischenspeichert (einschließlich Aufrufe von re.match()).
Die Codeanalyse des re-Moduls in Python 2.5 zeigt Folgendes:
def match(pattern, string, flags=0): return _compile(pattern, flags).match(string) def _compile(*key): cachekey = (type(key[0]),) + key p = _cache.get(cachekey) if p is not None: return p # Actual compilation on cache miss if len(_cache) >= _MAXCACHE: _cache.clear() _cache[cachekey] = p return p
Dies zeigt, dass der Hauptunterschied zwischen der Verwendung von re.compile() und dem direkten Abgleich im Timing des Kompilierungsprozesses liegt. re.compile() erzwingt die Kompilierung, bevor der Abgleich durchgeführt wird, während der direkte Abgleich den regulären Ausdruck intern kompiliert, wenn die Match-Funktion aufgerufen wird.
Fazit
Während die Vorkompilierung regulärer Ausdrücke mit re.compile() scheinbar keine nennenswerten Leistungssteigerungen bietet, kann sie für die Organisation und Benennung wiederverwendbarer Muster nützlich sein. Es ist jedoch wichtig zu wissen, dass Python kompilierte reguläre Ausdrücke intern zwischenspeichert, was möglicherweise den wahrgenommenen Nutzen der Vorkompilierung verringert.
Das obige ist der detaillierte Inhalt vonVerbessert die Vorkompilierung regulärer Ausdrücke mit „re.compile()' die Python-Leistung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!