在Python中,你」通常只使用lambda表示非常簡短的函數,這些函數可以很容易地放入創建它們的行內。 (某些語言有其他意見。)
由於@ DSM在他們的評論中暗示,lambdas本質上是創建函數時的一種快捷方式,因爲它不值得給它們起個名字。
如果您正在做更復雜的事情,或者如果您需要爲代碼提供一個名稱供以後參考,那麼lambda表達式對您而言並不是什麼捷徑 - 相反,您可能還需要def
ine一個普通的舊功能。的
因此,而不是分配lambda表達式給一個變量:
y = lambda u: u**(-2) + 8
可以定義變量是一個函數:
def y(u):
return u**(-2) + 8
,讓你的房間說明了一下,或者是更復雜,或者你需要做的任何事情:
def y(u):
"""
Bloopinate the input
u should be a positive integer for fastest results.
"""
offset = 8
bloop = u ** (-2)
return bloop + offset
函數和lambdas都是「callabl e「,這意味着就scipy.integrate.quad()
而言,它們實質上是可互換的。
要組合可調對象,可以使用多種不同的技巧。
def triple(x):
return x * 3
def square(x):
return x * x
def triple_square(x):
return triple(square(x))
def triple_plus_square(x):
return triple(x) + square(x)
def triple_plus_square_with_explaining_variables(x):
tripled = triple(x)
squared = square(x)
return tripled + squared
有更高級的選項,我只會考慮如果它使你的代碼更清晰(它可能不會)。例如,你可以把可調用的列表:
all_the_things_i_want_to_do = [triple, square]
一旦他們在列表中,你可以使用基於列表的操作對他們的工作(包括將它們依次reduce
列表中向下一個值)。
但是,如果你的代碼和大多數代碼一樣,那麼按名稱調用對方的常規函數將是最簡單的編寫和最容易閱讀的。
我對'scipy.integrate.quad'不熟悉,但'f = lambda u:y(u)+ x(u)'是一種將兩個函數加在一起的方法。 –
另外:如果你打算立即給你的函數一個名字,爲什麼你要使用'lambda'? – DSM
老實說,我使用lambda,因爲我不知道任何其他選項與我非常有限的python經驗,這就是爲什麼我加了最後一部分的問題。 – coffeepls