Implikasi Prestasi Python's re.compile
Dalam Python, modul semula menyediakan kefungsian untuk bekerja dengan ungkapan biasa. Satu persoalan yang sering timbul ialah sama ada terdapat faedah prestasi dalam menggunakan kaedah re.compile untuk pra-kompil ungkapan biasa.
Menggunakan re.compile lwn. Padanan Langsung
Pertimbangkan dua coretan kod berikut:
h = re.compile('hello') h.match('hello world')
re.match('hello', 'hello world')
Coretan pertama pra-kompil ungkapan biasa 'hello' menggunakan re.compile() dan kemudian menggunakan corak yang disusun untuk melaksanakan padanan. Coretan kedua hanya menggunakan fungsi re.match() secara langsung untuk melaksanakan perlawanan.
Analisis Bukti Anekdot dan Kod
Sesetengah pengguna melaporkan bahawa mereka tidak memerhati sebarang perbezaan prestasi yang ketara antara menggunakan re.compile() dan pemadanan langsung. Ini disokong oleh fakta bahawa Python secara dalaman menyusun ungkapan biasa dan menyimpannya dalam cache apabila ia digunakan (termasuk panggilan untuk re.match()).
Analisis kod modul semula dalam Python 2.5 mendedahkan bahawa:
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
Ini menunjukkan bahawa perbezaan utama antara menggunakan re.compile() dan pemadanan langsung ialah masa proses penyusunan. re.compile() memaksa kompilasi berlaku sebelum perlawanan dilakukan, manakala pemadanan langsung menyusun ungkapan biasa secara dalaman apabila fungsi padanan dipanggil.
Kesimpulan
Walaupun pra-kompil ungkapan biasa dengan re.compile() nampaknya tidak menawarkan peningkatan prestasi yang ketara, ia boleh berguna untuk mengatur dan menamakan corak boleh guna semula. Walau bagaimanapun, adalah penting untuk mengetahui bahawa cache Python menyusun ungkapan biasa secara dalaman, yang berpotensi mengurangkan faedah yang dilihat daripada pra-penyusunan.
Atas ialah kandungan terperinci Adakah Pra-Kompilasi Ungkapan Biasa dengan `re.compile()` Meningkatkan Prestasi Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!