반응형
질문
파이썬에서 정규 표현식을 컴파일하여 사용하는 것에 어떤 이점이 있나요?
h = re.compile('hello')
h.match('hello world')
vs
re.match('hello', 'hello world')
답변
나는 이미 컴파일된 정규식을 실행하는 경험이 많이 있으며, 그것을 동적으로 컴파일하는 것과는 어떤 차이도 느끼지 못했습니다. 물론, 이것은 주관적인 경험에 불과하며, 컴파일에 대한 좋은 주장은 아니지만, 차이가 미미하다는 것을 발견했습니다.
수정:
실제 Python 2.5 라이브러리 코드를 빠르게 살펴보니, Python은 내부적으로 정규식을 컴파일하고 캐시에 저장합니다. (re.match()
호출을 포함하여 사용할 때마다) 따라서 실제로 정규식이 컴파일되는 시점만 변경하고, 캐시를 확인하는 데 걸리는 시간만 절약할 수 있습니다 (내부 dict
유형에서의 키 조회).
모듈 re.py에서 (주석은 제가 추가한 것입니다):
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
# ...
# 캐시 미스 시 실제 컴파일 수행
# ...
# 컴파일된 정규식 캐시
if len(_cache) >= _MAXCACHE:
_cache.clear()
_cache[cachekey] = p
return p
여전히 정규식을 사전에 컴파일하는 경우가 많지만, 그것은 예상되는 성능 향상을 위한 것이 아니라 좋고 재사용 가능한 이름에 바인딩하기 위한 것입니다.
반응형
댓글