>  기사  >  백엔드 개발  >  Python 정규식을 사용하여 코드를 메모하는 방법

Python 정규식을 사용하여 코드를 메모하는 방법

WBOY
WBOY원래의
2023-06-22 19:43:531418검색

Python에서 정규식은 매우 강력한 텍스트 처리 도구입니다. 텍스트의 특정 형식을 일치시키고 바꾸는 데 사용할 수 있으므로 텍스트 처리가 더욱 효율적이고 편리해집니다.

대규모 코드를 작성할 때 메모가 필요한 상황에 자주 직면하게 됩니다. 암기(memorization)는 함수 실행 중에 생성된 결과를 캐싱하여 후속 호출에서 바로 사용할 수 있도록 함으로써 반복 계산을 피하고 코드 실행 효율성을 향상시키는 것을 말합니다. Python에서는 데코레이터를 사용하여 메모 기능을 구현할 수 있으며 정규식은 메모 캐시를 더 잘 관리하는 데 도움이 될 수 있습니다.

이 글에서는 Python 정규식을 사용하여 코드를 암기하는 방법을 소개합니다. 먼저 데코레이터의 기본적인 사용법을 이해해야 합니다.

  1. Decorator Basics

Decorator는 함수 코드를 변경하지 않고도 함수에 추가 기능을 추가할 수 있는 구문 구조입니다. 이는 일반적으로 장식된 함수를 매개변수로 사용하는 함수이며, 해당 반환 값은 새 함수입니다. 이 새 함수는 장식된 함수가 호출될 때 자동으로 몇 가지 추가 작업을 수행합니다.

다음은 함수 실행 시간을 계산할 수 있는 간단한 데코레이터 예제입니다.

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print('Function "{}" takes {}s to execute.'.format(func.__name__, end_time - start_time))
        return result
    return wrapper

@timer
def foo():
    time.sleep(1)
    return 'Done'

foo()

위 코드에서는 함수를 매개변수로 받아들이고 새 함수 래퍼를 반환하는 데코레이터 타이머가 정의됩니다. 래퍼 함수는 데코레이팅된 함수를 실행할 때 먼저 함수의 실행 시간을 계산한 다음 실행 시간을 출력하고 마지막으로 데코레이팅된 함수의 실행 결과를 반환합니다.

데코레이터를 사용하는 경우 데코레이팅된 함수 앞에 @designator 이름 구문만 추가하면 됩니다.

  1. 메모이제이션 구현

아래에서는 데코레이터를 사용하여 메모이제이션 기능을 구현하는 방법을 소개하겠습니다. 특히, 우리는 후속 호출이 재계산 없이 캐시된 결과를 직접 사용할 수 있도록 함수의 입력 매개변수와 출력 결과를 캐시할 수 있기를 원합니다. 이 기능을 달성하기 위해 Python 사전의 특수 데이터 구조를 사용할 수 있습니다. 함수 입력 매개변수를 사전의 키로 사용하고 함수 출력 결과를 사전의 값으로 사용하여 전역 변수에 저장합니다. 데코레이팅된 함수가 호출될 때마다 먼저 해당 출력 결과가 사전에 이미 있는지 확인하고, 존재하는 경우 캐시된 결과를 직접 반환합니다. 그렇지 않으면 함수 계산이 수행되고 출력 결과가 사전에 추가됩니다. .

다음은 간단한 memoize 데코레이터 예입니다.

import functools

memory = {}

def memoize(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        key = (args, tuple(kwargs.items()))
        if key not in memory:
            memory[key] = func(*args, **kwargs)
        return memory[key]
    return wrapper

@memoize
def add(x, y):
    print('Adding {} and {}...'.format(x, y))
    return x + y

print(add(2, 3))    # Adding 2 and 3... 5
print(add(2, 3))    # 5

위 코드에서 memoize 데코레이터의 기능은 캐시 키-값 쌍을 전역 변수 메모리에 저장하여 후속 호출에서 확인할 수 있도록 하는 것입니다. . 캐시된 결과가 있습니다. 장식된 함수가 호출되면 입력 매개변수는 먼저 튜플과 사전으로 변환된 다음 키-값 쌍으로 사용되어 캐시된 결과가 있는지 확인합니다. 존재하지 않는 경우 데코레이팅된 함수가 호출되어 결과를 계산하고 결과가 캐시 사전에 추가됩니다. 존재하는 경우 캐시된 결과가 직접 반환됩니다. 장식된 함수의 경우 functools.wraps를 사용하여 독스트링 및 함수 이름 상속을 구현합니다.

위 코드는 일반적인 데이터 유형을 함수 입력 매개변수로 사용하는 데 적합하지만, 실제 개발에서는 목록, 튜플, 집합 등과 같은 더 복잡한 데이터 유형을 접할 수 있습니다. 이 시점에서 키-값 쌍을 캐싱하기 위한 키로 사용할 수 있도록 정규식을 사용하여 데이터 유형을 문자열로 변환해야 합니다.

  1. 정규식 사용

정규식은 문자열을 일치시키고 처리하는 데 사용할 수 있는 표현식입니다. Python에서는 re 모듈을 사용하여 정규식을 사용할 수 있습니다. 다음은 간단한 정규식 예입니다.

import re

pattern = r'd+'
text = '123abc456def789'
match = re.search(pattern, text)
print(match.group())    # 123

위 코드에서는 하나 이상의 숫자 일치를 의미하는 d+를 포함하는 정규식 패턴을 정의합니다. 그런 다음 re.search 함수를 사용하여 문자열 텍스트의 패턴을 일치시키고 Match 개체를 반환합니다. Match 개체에는 일치하는 문자열, 시작 및 끝 위치 등과 같은 정보가 포함되어 있습니다. 그룹 메서드를 통해 일치하는 문자열을 얻을 수 있습니다.

메모이제이션 기능을 구현할 때 입력 매개변수를 문자열로 변환하고 정규식을 사용하여 매개변수에 있는 숫자, 문자, 기호 및 기타 정보를 키-값 쌍 캐싱을 위한 키로 추출할 수 있습니다. 다음은 샘플 코드입니다.

import re
import functools

memory = {}

def memoize(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        args_str = ', '.join(map(str, args))
        kwargs_str = ', '.join('{}={}'.format(k, v) for k, v in kwargs.items())
        key_str = args_str + ', ' + kwargs_str
        match = re.search(r'd+', key_str)
        key = match.group()
        if key not in memory:
            memory[key] = func(*args, **kwargs)
        return memory[key]
    return wrapper

@memoize
def add(x, y):
    print('Adding {} and {}...'.format(x, y))
    return x + y

print(add(2, 3))    # Adding 2 and 3... 5
print(add(2, 3))    # 5

print(add(2, 4))    # Adding 2 and 4... 6
print(add(2, 4))    # 6

print(add(1, y=2))  # Adding 1 and 2... 3
print(add(1, y=2))  # 3

위 코드에서는 입력 매개변수를 문자열로 변환하고 정규 표현식을 사용하여 여기서 숫자를 키-값 쌍의 키로 추출합니다. 해당 키가 캐시 사전에 이미 있으면 결과가 직접 반환되고, 그렇지 않으면 함수 계산이 수행되고 결과가 캐시 사전에 추가됩니다.

  1. 요약

이 글에서는 Python 정규식을 사용하여 코드를 암기하는 방법을 소개합니다. 데코레이터와 정규식을 사용하면 함수 실행 결과 캐시를 더 잘 관리하고 반복 계산을 방지하며 코드 실행 효율성을 향상시킬 수 있습니다. 실제 응용에서는 암기 기술을 더 잘 활용하기 위해 캐시 만료 및 용량 제어와 같은 문제도 고려해야 합니다.

위 내용은 Python 정규식을 사용하여 코드를 메모하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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