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
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python에 ++ 및 - 연산자가 없는 이유 (0) | 2021.09.28 |
---|---|
파이썬에서 문자열 'contains' 메서드를 사용하는 방법 (0) | 2021.09.28 |
파이썬에서 "private" 변수 (0) | 2021.09.16 |
파이썬에서 "named tuples" 이란? (0) | 2021.09.15 |
Python Interpreter에서 업데이트 된 패키지를 다시 가져 오는 방법 (0) | 2021.09.15 |