首页 > 解决方案 > 在 Python 中将函数(带参数)作为参数传递

问题描述

我正在使用 Python 内置库timeit测量不同排序方法的性能。我想将一个函数和一个整数作为参数传递给timeit()中正在测试的语句。我尝试了以下方法:

def sort_1(l):
    ...
    return l_sorted

def test(f: Callable, l_len: int):
    l = np.random.rand(low=-1000, high=1000, size=l_len)
    f(l)


timeit.timeit(stmt=test(sort_1, l_len=10), number=1000)

...带有 ValueError 表示 stmt 既不是字符串也不是可调用的。当我这样调用它时不会发生错误:

timeit.timeit(stmt=test, number=1000)

...但是我不能将任何参数传递给test()。如果有人想将参数传递给作为参数给出的函数,一般的解决方案是什么?(比方说,当一个方法已经实现并且无法在单独的参数中传递参数时)

干杯

编辑:

@jonrsharpe,谢谢!解决方案如下所示:

timeit.timeit(stmt='test(f=sort_1, l_len=10)', number=100, globals=globals())

标签: python-3.xbenchmarking

解决方案


推荐阅读