지역 변수를 플래시하지 않는 이유를 이해 : 나는 foo
여러 번 호출하는 경우장식 : 그것은 내가 간단한 장식을 작성했습니다
from functools import wraps
import random
def my_dec(f):
lst = list()
@wraps(f)
def wrapper(*args):
lst.append(random.randint(0, 9))
print(lst)
return f(*args)
return wrapper
@my_dec
def foo():
print("foo called")
, lst
플러시되지 않습니다. 대신 시간이 지남에 따라 생성됩니다.
foo()
> [4]
> foo called
foo()
> [4, 9]
> foo called
foo()
> [4, 9, 1]
> foo called
...
이유는 무엇입니까 : 따라서, foo
의 여러 호출과 같은 출력을 반환? 난 decorator
그냥 my_dec(foo)
에 대한 구문 설탕 생각?! 나는 각각 my_dec
에 대한 호출이 lst
을 플러시한다고 가정했다.
당신은 장식자가'foo = my_dec (foo)'에 대한 문법적 설탕이라는 것이 맞습니다 ... 그러나 이것이 어떻게 당신이'lst'가 "플러시 (flushed)"될 것이라고 생각하게 할지를 보지 못합니다. 여기에주의하십시오 -'my_dec'는'foo'라고 몇 번이나 호출 되더라도 한 번만 호출됩니다 ... – mgilson
아, 그래요. 'my_dec'는'foo'가 호출 될 때마다 호출됩니다 만,'foo = my_dec (foo)'는 한 번만 발생하기 때문에 분명히 아닙니다. 설명 주셔서 감사합니다! – daniel451
추가 질문 : 어떻게해서든지 '처음'에 액세스 할 수 있습니까? – daniel451