将lambda函数作为变量传递给timeit中的另一个函数

cla*_*lam 2 python lambda arguments timeit

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

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

我正在做的事情:

def testTimingOfFunc(f):
    time = timeit.timeit("package.func(f)", "from src import package")
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说f没有定义.

其他一切都正常.我打电话的时候:

testTimingOfFunc('lambda x:x**2')
Run Code Online (Sandbox Code Playgroud)

并将功能更改为:

def testTimingOfFunc(f):
    time = timeit.timeit("package.func(" + str(f) + ")",
                         "from src import package")
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,所以我知道关于timeit功能的一切都很好.

这不是testTimingOfFunc有效的方式; 传入函数引用,而不是字符串.

我如何能够通过任何想法f作为参数传递给functimeit

Sin*_*ion 5

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

from src import package
import functools

def testTimingOfFunc(f):
    time = timeit.timeit(functools.partial(package.func, f))
Run Code Online (Sandbox Code Playgroud)