Python装饰器范围

时间:2017-04-21 11:38:26

标签: python-3.x scope decorator

我正在尝试理解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?<登记/> 谢谢!

1 个答案:

答案 0 :(得分:-1)

counter += 1counter = counter + 1的糖,它定义了一个等于1 + counter的变量counter,此时此数据未绑定。