我在Python 3的一个装饰器中遇到了一个非常奇怪的问题。
如果我这样做:
def rounds(nr_of_rounds):
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
return nr_of_rounds
return inner
return wrapper
它运行得很好。但是,如果我这样做:
def rounds(nr_of_rounds):
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
lst = []
while nr_of_rounds > 0:
lst.append(func(*args, **kwargs))
nr_of_rounds -= 1
return max(lst)
return inner
return wrapper
我理解为:
while nr_of_rounds > 0:
UnboundLocalError: local variable 'nr_of_rounds' referenced before assignment
换句话说,如果我在返回语句中使用 nr_of_rounds
,我可以在内部函数中使用它,但我不能对其进行其他任何操作。为什么会这样?