from datetime import datetime, timezone
@wraps(fn)
def inner(*args, **kwargs):
run_dt = datetime.now(timezone.utc)
result = fn(*args, **kwargs)
print('{0}: called {1}'.format(fn.__name__, run_dt))
return result
return inner
def timed(fn):
from functools import wraps
from time import perf_counter
@wraps(fn)
def inner(*args, **kwargs):
start = perf_counter()
result = fn(*args, **kwargs)
end = perf_counter()
print('{0} ran for {1:.6f}s'.format(fn.__name__, end-start))
return result
return inner
@timed
@logged
def factorial(n):
from operator import mul
from functools import reduce
return reduce(mul, range(1, n+1))
print(factorial(2))
Выше приведены два декоратора к функциям. Обязательно ли, чтобы функции inner каждого декоратора возвращали тот же результат работы функции? Если, например в результат работы функции в одном декораторе я прибавлю единицу, то вызов функции приведет к выдаче результата увеличенного на единицу. То же самое происходит при добавлении к результату единицы, для второго декоратора. Значит ли это, что в своей работе они действуют синхронно?
давай ты на пастбин выложишь?
декораторы действуют по очереди
Обсуждают сегодня