我有一个称为 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
作为参数传递给timeit
的CC_11的任何想法?
可以使用Python可呼叫值来调用时间:只需将您的方法更改为:
from src import package
import functools
def testTimingOfFunc(f):
time = timeit.timeit(functools.partial(package.func, f))
您可以在package
的名称空间中存储对f
的引用。请注意,您没有名称冲突
def testTimingOfFunc(f):
from src import package
package.f = f
time = timeit.timeit("package.func(package.f)", "from src import package")
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)))