Можно ли передать аргумент в декорированную функцию?
Я написал ниже декоратор:
import time
def runtime(some_function):
def wrapper():
start = time.time()
some_function()
runtime = time.time() - start
print(runtime)
return wrapper
@runtime
def printing(upper_limit):
for number in range(upper_limit):
print(number)
printing(10)
printing(100)
printing(1000)
printing(10000)
Почему я получаю:
TypeError: wrapper () принимает 0 позиционных аргументов, но 1 был задан
при запуске кода и как это исправить?
1 ответ
Вам нужно сделать wrapper
принять аргументы и передать их some_function
, Следует также вернуть то, что some_function
возвращается, чтобы быть более общим.
def runtime(some_function):
def wrapper(*args, **kwargs):
start = time.time()
result = some_function(*args, **kwargs)
runtime = time.time() - start
print(runtime)
return result
return wrapper