Область переменных в Python Decorator
У меня очень странная проблема в 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
во внутренней функции, если я использую это в возвращении, но я не могу ничего с этим поделать. Это почему?