「re.compile()」を使用して正規表現を事前コンパイルすると、Python のパフォーマンスが向上しますか?

Linda Hamilton
リリース: 2024-11-07 18:05:02
オリジナル
776 人が閲覧しました

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

Python の re.compile のパフォーマンスへの影響

Python では、re モジュールは正規表現を操作するための機能を提供します。よく生じる質問の 1 つは、正規表現をプリコンパイルするために re.compile メソッドを使用することにパフォーマンス上の利点があるかどうかです。

re.compile とダイレクト マッチングの使用

次の 2 つのコード スニペットを考えてみましょう。

h = re.compile('hello')
h.match('hello world')
ログイン後にコピー
re.match('hello', 'hello world')
ログイン後にコピー

最初のスニペットは、re.compile() を使用して正規表現 'hello' をプリコンパイルし、コンパイルされたパターンを使用して照合を実行します。 2 番目のスニペットは、単純に re.match() 関数を直接使用して照合を実行します。

事例証拠とコード分析

一部のユーザーは、何も観察していないと報告しています。 re.compile() を使用する場合と直接一致させる場合とでは、パフォーマンスに大きな違いがあります。これは、Python が内部で正規表現をコンパイルし、正規表現が使用されるときに (re.match() の呼び出しを含む) キャッシュするという事実によって裏付けられています。

Python 2.5 の re モジュールのコード分析により、次のことが明らかになります。

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
ログイン後にコピー

これは、re.compile() の使用と直接一致の主な違いはコンパイル プロセスのタイミングであることを示しています。 re.compile() は、一致が実行される前にコンパイルを強制的に実行しますが、直接一致では、一致関数が呼び出されたときに正規表現が内部的にコンパイルされます。

結論

re.compile() を使用して正規表現を事前コンパイルしても、大幅なパフォーマンスの向上は見られませんが、再利用可能なパターンを整理して名前を付ける場合には役立ちます。ただし、Python はコンパイルされた正規表現を内部的にキャッシュするため、事前コンパイルの利点が損なわれる可能性があることに注意することが重要です。

以上が「re.compile()」を使用して正規表現を事前コンパイルすると、Python のパフォーマンスが向上しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート