Python의 re.compile이 성능에 미치는 영향
Python에서 re 모듈은 정규식 작업을 위한 기능을 제공합니다. 자주 제기되는 한 가지 질문은 re.compile 메서드를 사용하여 정규식을 미리 컴파일하면 성능상의 이점이 있는지 여부입니다.
re.compile 사용과 직접 일치 사용
다음 두 코드 조각을 고려하세요.
h = re.compile('hello') h.match('hello world')
re.match('hello', 'hello world')
첫 번째 조각은 re.compile()을 사용하여 정규식 'hello'를 사전 컴파일한 다음 컴파일된 패턴을 사용하여 일치를 수행합니다. 두 번째 스니펫은 단순히 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!