Seite 1 von 1
Bringt re.compile() Geschwindigkeitsvorteil?
Verfasst: Freitag 1. Dezember 2006, 13:11
von sape
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
Verfasst: Freitag 1. Dezember 2006, 13:31
von rayo
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
Verfasst: Freitag 1. Dezember 2006, 16:59
von Leonidas
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.
Verfasst: Freitag 1. Dezember 2006, 17:41
von sape
OK, danke euch. Werde das dann nur bei patter nutzen die ich öfter als 1-3 mal brauche.
lg
Verfasst: Freitag 1. Dezember 2006, 20:25
von birkenfeld
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.
Verfasst: Freitag 1. Dezember 2006, 23:17
von BlackJack
Der Cache ist aber nur ein Implemetierungsdetail, sollte man sich nicht drauf verlassen.