170 похожих чатов

Приветствую. Есть такой декоратор: def cache(func): hits =

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 - декоратор прекрасно работает. В чем дело?

13 ответов

21 просмотр

Иди читай правила чата

local и global scope, не ?

Попробуй значение hits и misses на 1000 поменять

И ты мб всё-таки код свой моноширинным сделаешь? Это невероятно трудно читать

тип он же пишет local variable, а у тебя там обе эти переменные глобальные

malorin-K. Автор вопроса
Антон
local и global scope, не ?

Так все три переменные объявлены только в пределах декоратора, до объявления враппера. При этом одну он жует нормально, а другие две - нет.

malorin K.
screenshot Проблема на твоей стороне.

Лол, у меня не отображается моноширинным на мобилке, соре. При этом другие посты заметны когда моноширинны(мягко говоря)

nonlocal misses, hits в начале wrapper напиши

malorin-K. Автор вопроса
uvicorn lasagna
nonlocal misses, hits в начале wrapper напиши

Так работает, да. Но почему оно нормально воспринимает memo?

malorin K.
Так все три переменные объявлены только в пределах...

неа, насколько я понимаю, когда ты объявляешь memo, ты не то чтобы создаёшь его, скорее говоришь, что это будет словарь, другого объяснения у меня нет

malorin-K. Автор вопроса
Антон
screenshot неа, насколько я понимаю, когда ты объявляешь memo...

Странное поведение, никогда с таким не сталкивался. Про nonlocal почитаю, конечно...

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта