Bringt re.compile() Geschwindigkeitsvorteil?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Oder warum sollte man das nutzen?

Geht doch auch wenn man z.B. gleich denn 'pattern' bei 're.split()' eingibt anstatt den 'pattern' erst mit 're.compile()' umzuwandeln und dann zu benutzen :?

lg
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Ohne compile muss re einfach bei jedem aufruf dein Pattern kompilieren und sonst nur 1mal.

Bringt etwas wenn du häufig die gleichen Patterns benutzt.

Gruss
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ist aber etwas unpraktisch wenn du das dann nicht nutzt - das Problem hatte Bazaar mal, dass die Startup-Zeit groß war, obwohl man die ganzen vorkompilieren regulären Ausdrücke nicht immer alle gebraucht hat. Okay, bei einigen wenigen regulären Ausdrücken fällt das natürlich noch nicht so ins Gewicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

OK, danke euch. Werde das dann nur bei patter nutzen die ich öfter als 1-3 mal brauche.

lg
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

rayo hat geschrieben:Ohne compile muss re einfach bei jedem aufruf dein Pattern kompilieren und sonst nur 1mal.
Stimmt nicht -- re.compile() hat einen Cache, weswegen re.match() mit gleichem Pattern nicht neu kompiliert.

Natürlich hat das Selbstkompilieren trotzdem Vorteile: Der Cache nimmt nur eine begrenzte Anzahl Einträge auf, man spart sich den Aufruf von re._compile() durch re.match(), und kann das Pattern mehrmals im Code verwenden.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Der Cache ist aber nur ein Implemetierungsdetail, sollte man sich nicht drauf verlassen.
Antworten