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 중국어 웹사이트의 기타 관련 기사를 참조하세요!