>  기사  >  백엔드 개발  >  `re.compile()`을 사용하여 정규식을 사전 컴파일하면 Python 성능이 향상됩니까?

`re.compile()`을 사용하여 정규식을 사전 컴파일하면 Python 성능이 향상됩니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-07 18:05:02778검색

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.