簡體   English   中英

及時將lambda函數作為變量傳遞給另一個函數

[英]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作為參數傳遞給functimeit

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM