[英]TypeError: 'NoneType' object is not callable when passing arguments to decorator function
我试图弄清楚如何使用 python 装饰器,我试图通过创建自己的timeit
命令版本来为 function 调用计时。 此代码正在运行
def mytimeit(f):
def wrapper(*args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
print(f"Function took {time.time() - start} seconds to run.")
return result
return wrapper
@mytimeit
def simple_loop(n=10, sleep=0.2):
for i in range(n):
time.sleep(sleep)
我现在要做的是以某种方式将参数传递给该装饰器。 我已经看到它完成了,看起来我必须将我的装饰器包装在另一个 function 中,但我无法让它工作,我不确定为什么。
这就是我所拥有的
def mytimeit_with_args(stuff_to_print):
def decorator(f):
def func(*args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
print(stuff_to_print)
print(f"Function took {time.time() - start} seconds to run.")
return result
return func
@mytimeit_with_args("just some stuff")
def harder_loop(n=10, sleep=0.2):
for i in range(n):
time.sleep(sleep)
我得到的错误是TypeError: 'NoneType' object is not callable
我做错了什么?
你实际上真的很亲近。 您收到该错误的原因是因为您在mytimeit_with_args
function 的最后没有返回任何内容,因此 NoneType is not callable 错误。 您只需要像这样在mytimeit_with_args
的末尾添加一个 return 语句
def mytimeit_with_args(stuff_to_print):
def decorator(f):
def func(*args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
print(stuff_to_print)
print(f"Function took {time.time() - start} seconds to run.")
return result
return func
return decorator
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.