我有一个名为func
的Python函数,我正在尝试使用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
作为参数传递给func
中timeit
的任何想法?
答案 0 :(得分:5)
可以使用python可调用值调用timeit:只需将方法更改为:
from src import package
import functools
def testTimingOfFunc(f):
time = timeit.timeit(functools.partial(package.func, f))
答案 1 :(得分:1)
您可以在f
的命名空间中存储package
的引用。请注意,尽管
def testTimingOfFunc(f):
from src import package
package.f = f
time = timeit.timeit("package.func(package.f)", "from src import package")
答案 2 :(得分: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)))