프로그래밍 언어/Python

Python의 re.compile가 필요한 이유

Rateye 2021. 9. 27. 10:30
728x90
반응형
질문 : Python의 re.compile을 사용할 가치가 있습니까?

파이썬에서 정규 표현식에 컴파일을 사용하면 어떤 이점이 있습니까?

h = re.compile('hello')
h.match('hello world')

vs

re.match('hello', 'hello world')
답변

나는 즉석에서 컴파일하는 것과 비교하여 컴파일 된 정규식을 1000 번 실행 한 경험이 많았으며 눈에 띄는 차이를 발견하지 못했습니다. 분명히, 이것은 일화이며, 확실히 컴파일에 대한 좋은 인수,하지만 난 무시할 수의 차이를 발견했습니다.

편집 : 실제 Python 2.5 라이브러리 코드를 한눈에 살펴본 후, 어쨌든 사용할 때마다 ( re.match() 호출 포함) Python이 내부적으로 정규식을 컴파일하고 캐시하므로 정규식이 도착할 때만 실제로 변경됩니다. 캐시를 확인하는 데 걸리는 시간 (내부 dict 유형에 대한 키 조회) 만 있으면됩니다.

re.py 모듈에서 (댓글은 내 것입니다) :

def match(pattern, string, flags=0):
    return _compile(pattern, flags).match(string)

def _compile(*key):

    # Does cache check at top of function
    cachekey = (type(key[0]),) + key
    p = _cache.get(cachekey)
    if p is not None: return p

    # ...
    # Does actual compilation on cache miss
    # ...

    # Caches compiled regex
    if len(_cache) >= _MAXCACHE:
        _cache.clear()
    _cache[cachekey] = p
    return p

나는 여전히 정규식을 미리 컴파일하지만 예상되는 성능 향상을 위해서가 아니라 멋지고 재사용 가능한 이름으로 만 바인딩합니다.

출처 : https://stackoverflow.com/questions/452104/is-it-worth-using-pythons-re-compile
728x90
반응형