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

Linda Hamilton
Lepaskan: 2024-11-07 18:05:02
asal
708 orang telah melayarinya

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')
Salin selepas log masuk
re.match('hello', 'hello world')
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!