함수 안에서 static 변수를 설정하려면

C에서는 밑의 코드같이 함수 안에서 static을 명시해줬는데 파이썬으로 함수 안에서 static을 선언하려면 어떻게 하나요?

C코드

void foo()
{
    static int counter = 0;
    counter++;
    printf("counter is %d\n", counter);
}

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    질문하신 C코드와 똑같은 일을 하는 파이썬 스크립트는 다음과 같습니다.

    소스코드1 - 가장 일반적인 방법

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

    foo.counter = 0이 함수의 밑이 아니라 위에 있게 하려면 다음과 같이 decorator를 만들어야 합니다.

    소스코드2 - decorator를 쓰는 방법

    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
    
    

    소스코드3 - 예외처리를 이용하는 방법

    def foo():
        try:
            foo.counter += 1
        except AttributeError:
            foo.counter = 1
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.