Я пытаюсь написать декоратор в python 3, который в основном хранит подсчет количества раз, когда функция вызывается. Вот мой код:Декоратор в последовательности вызова python
def call_counter(func):
def helper(x):
helper.calls += 1
return func(x)
helper.calls = 0
return helper
@call_counter
def succ(x):
return x + 1
for i in range(10):
print(succ(i)) # <--- ??
Я понимаю, как декоратор работает, но только путаница у меня есть вот что первый когда-либо позвонить в SUCC (х) получает функцию взамен @call_counter декоратора. Однако основная путаница здесь, я не совсем понимаю, как здесь происходят последовательные вызовы внутри цикла for?
Итак, как происходит поток после того, как мы получили возвращенную функцию (помощник в этом случае) от первого вызова.
Теперь внутри цикла for, succ (0), succ (1) и так далее, вызывается, как это работает? Повторно ли мы используем ту же возвращенную функцию, которую мы получили от первого вызова, или же вызывающий вызывает каждый раз, когда цикл for добавляется 1?
Стоит упомянуть, что если вы хотите сделать свой декоратор прозрачным, вы можете использовать 'functools.wraps'. – khachik
Спасибо Джим, но я думаю, что u предназначался для размещения печати (succ) внутри succ(), а не внутри цикла for right? но я понимаю вашу точку зрения. – skyrocker