将timeit与args,kwargs一起使用

时间:2019-10-29 00:09:27

标签: python

如果我有这样的功能:

def print_args(wait=0.4, *args, **kwargs):
    print (f"Sleep: {wait}s")
    time.sleep(wait)
    print (f"Args: {args}")
    print (f"Kwargs: {kwargs}")

>>> print_args(0.2, 2, k='a')
Sleep: 0.2s
Args: (2,)
Kwargs: {'k': 'a'}

如何将函数print_args放入timeit中?

这有效:

>>> timeit(print_args, number=4)

但是怎么做:

>>> timeit(print_args(0.2, 2, k='a', number=4)

此外,是否有通用的方法可以执行以下操作:

timeit(func(*args, **kwargs), number)

(并且不仅要重写上面的print_args函数,还要对此模式具有更通用的含义。

更新:注意,我对编写计时器作为函数中的装饰器或从命令行运行内容不感兴趣。我实际上是在问是否可以做这样的事情:

timeit(func(*args, **kwargs), number)

如果the mentioned duplicate出于任何原因直接解决了此问题,请告诉我哪个答案可以解决。我所看到的答案要么建议添加计时器,要么使用“ IPython的%timeit命令”。这不是我想要做的。

1 个答案:

答案 0 :(得分:1)

除非//.addTestDevice("YOUR_DEVICE_ID")的结果是您想要计时的可呼叫对象,否则func(*args, **kwargs)显然不会做您想要的事情。将调用换成lambda或函数:

timeit(func(*args, **kwargs), number)