StoryCode

static

Python, 파이썬
반응형

1) Python 에는 그런 거 없다. 다른 방식으로 비슷하게 구현해야 한다.

 

2-1)

def func(static_var = [0]):

       static_var[0] +=1

        return static_var[0]

 

# func 를 의도한대로 사용한 결과

print(func()) # 1 출력

print(func()) # 2 출력

 

# func 를 의도에서 벗어나 사용한 결과 문제점

print(func()) # 1 출력

print(func([10, 20, 30])) # 11 출력

print(func()) # 2 출력

 

2-2) 2-1 의 문제점 해결한 방식. class member variable 방식

def func()

    func.counter += 1

    return func.counter

 

func.counter = 0

처럼 하면 func 객체 ( def 라 함수지만 python 에서 모두 객체이다. counter 는 member 변수가 되고, 객체가 사라지지 않는 이상 유지된다. Ex> del func.counter)

 

2-3) 2-1 의 문제점 해결한 방식. nonlocal 방식. in 에서 out의 변수 참조가 존재할 수 있어서 변수 유지해줌.

def out_func():
    static_var = 0
     def in_func():
          nonlocal static_var # static_var 는 in_func 에서만 변경할 수 있다.
          static_var 十= 1
          return static_var
     return in_func

 

out_func()

반응형