# какие-то действия с func
_cache = {'counter': 0}
def added_value():
_cache['counter'] = _cache['counter'] + 1
print("Полезная работа до начала работы функции")
func()
print("Полезная работа после выполнения функции")
return added_value
пытаюсь сделать по примеру декоратор:
def cache3(func):
_cache = 0
_count = 0
def add_func():
if 3 >= _count > 0:
return _cache
else:
_count = 0
_count += 1
_cache = func()
return add_func()
@cache3
def heavy():
print('Сложные вычисления')
return 1
выдает что переменная не объявлена типо UnboundLocalError: local variable '_count' referenced before assignment
как сделать чтоб заработал?
в декораторе add_func() замени на add_func И нужно врозвращать по return _cache
да. но дело не в этом. он не видит переменные
Во вложенной функции надо nonlocal надо использовать, если не ошибаюсь
Понятия не имею что у тебя там за пример. Но во вложенной функции не определены такие переменные, поэтому ты обратиться не можешь к ним
в этом примере все без нонлокала работает def wrapper(func): # какие-то действия с func _cache = {'counter': 0} def added_value(): _cache['counter'] = _cache['counter'] + 1 print("Полезная работа до начала работы функции") func() print("Полезная работа после выполнения функции") return added_value @wrapper def some_func(): print("Я полезная функция") some_func()
Обсуждают сегодня