[英]Passing a lambda function as a variable to another function in 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
作為參數傳遞給func
在timeit
?
timeit可以使用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)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.