0
misses = 0
memo = dict()
@functools.wraps(func)
def wrapper(*args, **kwargs):
arg_lst = (*args, tuple(kwargs))
if arg_lst not in memo:
misses += 1
memo[arg_lst] = func(*args, **kwargs)
else:
hits += 1
return memo[arg_lst]
return wrapper
Питон при этом ругается, что переменные hits и misses вызываются до своего объявления (UnboundLocalError: local variable 'misses' referenced before assignment). При этом на memo он не ругается, если убрать hits и misses - декоратор прекрасно работает. В чем дело?
Иди читай правила чата
local и global scope, не ?
Попробуй значение hits и misses на 1000 поменять
И ты мб всё-таки код свой моноширинным сделаешь? Это невероятно трудно читать
тип он же пишет local variable, а у тебя там обе эти переменные глобальные
Так все три переменные объявлены только в пределах декоратора, до объявления враппера. При этом одну он жует нормально, а другие две - нет.
Лол, у меня не отображается моноширинным на мобилке, соре. При этом другие посты заметны когда моноширинны(мягко говоря)
nonlocal misses, hits в начале wrapper напиши
Так работает, да. Но почему оно нормально воспринимает memo?
неа, насколько я понимаю, когда ты объявляешь memo, ты не то чтобы создаёшь его, скорее говоришь, что это будет словарь, другого объяснения у меня нет
Странное поведение, никогда с таким не сталкивался. Про nonlocal почитаю, конечно...
Обсуждают сегодня