我正在尝试理解Python中装饰器的逻辑,我在局部变量的范围方面遇到了麻烦 代码:
# version #1
def decorator(function):
counter = 0
def wrapper():
print(counter)
function()
return counter
return wrapper
# version #2
def decorator(function):
counter = 0
def wrapper():
counter += 1
function()
return counter
return wrapper
@decorator
def function():
print("Printed from function().")
function()
我的问题是,为什么#1
有效并打印counter
,但当我尝试更改counter
中的#2
时,我得到UnboundLocalError: local variable 'counter' referenced before assignment
?<登记/>
谢谢!
答案 0 :(得分:-1)
counter += 1
是counter = counter + 1
的糖,它定义了一个等于1 + counter
的变量counter
,此时此数据未绑定。