>백엔드 개발 >파이썬 튜토리얼 >Python 함수에서 정적 변수를 어떻게 시뮬레이션할 수 있습니까?

Python 함수에서 정적 변수를 어떻게 시뮬레이션할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-06 13:59:09416검색

How Can We Simulate Static Variables in Python Functions?

Python 함수 내에서 정적 변수 활용

C/C에서 정적 변수는 함수 호출 전반에 걸쳐 값을 유지하는 데 중요한 역할을 합니다. 그러나 Python에는 이 개념에 대한 명시적인 동등 항목이 없습니다. 그렇다면 Python 함수 내에서 정적 변수를 어떻게 효과적으로 구현할 수 있습니까?

Python의 관용적 접근 방식에는 클래스 수준 변수를 조작하는 것이 포함됩니다. 이는 함수와 관련 상태를 캡슐화하는 클래스를 정의하여 달성할 수 있습니다. 그러나 클래스를 사용하는 것이 바람직하지 않은 시나리오에서는 대체 방법을 사용해야 합니다.

한 가지 해결 방법은 아래 그림과 같이 함수의 네임스페이스를 활용하는 것입니다.

def foo():
    if not hasattr(foo, "counter"):
        foo.counter = 0
    foo.counter += 1
    print("Counter is %d" % foo.counter)

이 코드 조각은 함수의 네임스페이스를 사용하여 호출 전반에 걸쳐 지속되도록 합니다. 그러나 첫 번째 호출 시 명시적인 초기화가 필요합니다.

보다 간결하고 맞춤화된 접근 방식을 위해 데코레이터를 사용할 수 있습니다. 다음 데코레이터는 정적 변수를 생성하고 지정된 키워드 인수에 따라 초기화합니다.

def static_vars(**kwargs):
    def decorate(func):
        for k in kwargs:
            setattr(func, k, kwargs[k])
        return func
    return decorate

이 데코레이터는 다음과 같이 활용할 수 있습니다.

@static_vars(counter=0)
def foo():
    foo.counter += 1
    print("Counter is %d" % foo.counter)

이 데코레이터를 활용하면 카운터 초기화 코드를 함수 정의 상단에 배치할 수 있어 더욱 직관적이고 읽기 쉬운 구현이 가능합니다.

위 내용은 Python 함수에서 정적 변수를 어떻게 시뮬레이션할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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