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 サイトの他の関連記事を参照してください。