繁体   English   中英

TypeError:'NoneType' object 在将 arguments 传递给装饰器 function 时不可调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM