我知道标题有点令人困惑。
所以让我以此代码为例:
import timeit
def test1(x,y):
return x*y
def time_cost(func):
start = timeit.default_timer()
func()
stop = timeit.default_timer()
print(stop - start)
time_cost(test1)
我想将test1的两个参数x和y提供给time_cost函数。
但我不知道该怎么做。
我之前尝试过这个:
import timeit
def test1(x,y):
return x*y
def time_cost(func):
start = timeit.default_timer()
func
stop = timeit.default_timer()
print(stop - start)
time_cost(test1(1,2))
它可以运行,但结果非常奇怪,我认为这是错误的。
那怎么办呢?谢谢大家。
答案 0 :(得分:4)
返回一个符合你想要的功能。
def time_cost(func):
def run(*args, **kwargs):
start = timeit.default_timer()
func(*args, **kwargs)
stop = timeit.default_timer()
print(stop - start)
return run
然后打电话。
time_cost(test1)(1, 2)
答案 1 :(得分:2)
试一试。
from functools import wraps
import timeit
def time_cost(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = timeit.default_timer()
result = func(*args, **kwargs)
stop = timeit.default_timer()
print(stop - start)
return result
return wrapper
test1 = time_cost(test1)
test1(1,2)
这种功能称为装饰器。也称为包装器或闭包。
您也可以使用装饰器语法:
@time_cost
def test1(x,y):
return x*y
test1(1,2)
这与上面的代码相同。