如何通过Python调用其他函数中带参数的一个函数?

时间:2016-04-27 03:47:53

标签: python function

我知道标题有点令人困惑。

所以让我以此代码为例:

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))  

它可以运行,但结果非常奇怪,我认为这是错误的。

那怎么办呢?谢谢大家。

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)

这与上面的代码相同。

相关问题