2

我有一个名为的 Python 函数func,我正在尝试使用timeit.

func接受一个参数,f,这也是一个函数。在我正在编写的程序中,它是一个 lambda 函数,但它也可以是一个定期定义的函数。重要的是这个函数的源代码不可用func,所有可用的只是对它的引用。

我正在尝试做的事情:

def testTimingOfFunc(f):
    time = timeit.timeit("package.func(f)", "from src import package")

我收到一个错误,指出f未定义。

其他一切工作正常。当我打电话时:

testTimingOfFunc('lambda x:x**2')

并将函数更改为:

def testTimingOfFunc(f):
    time = timeit.timeit("package.func(" + str(f) + ")",
                         "from src import package")

一切正常,所以我知道有关该timeit功能的一切都很好。

但这不是testTimingOfFunc工作原理。传入的是函数引用,而不是字符串。

关于如何将我f作为参数传递给funcin的任何想法timeit

4

3 回答 3

5

timeit 可以使用 python 可调用值调用:只需将您的方法更改为:

from src import package
import functools

def testTimingOfFunc(f):
    time = timeit.timeit(functools.partial(package.func, f))
于 2012-10-22T23:33:15.037 回答
1

您可以将对 的引用存储fpackage. 请注意,您没有名称冲突

def testTimingOfFunc(f):
    from src import package
    package.f = f
    time = timeit.timeit("package.func(package.f)", "from src import package")
于 2012-10-23T00:11:08.250 回答
0

timeit.Timer接受无参数函数作为其参数之一:

def tester(f):
    from src import package
    def wrapper():
        package.func(f)
    return wrapper

def foo(x):
    return x * 2

print(timeit.timeit(tester(foo)))
于 2012-10-22T23:34:47.920 回答