Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Pra-Kompilasi Ungkapan Biasa dengan `re.compile()` Meningkatkan Prestasi Python?

Adakah Pra-Kompilasi Ungkapan Biasa dengan `re.compile()` Meningkatkan Prestasi Python?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 18:05:02778semak imbas

Does Pre-Compiling Regular Expressions with `re.compile()` Enhance Python Performance?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn