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



我有一个称为 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)))

相关内容

  • 没有找到相关文章

最新更新