在python中,你怎麼寫一個多行的lambda函數。我試圖如何用多行編寫python lambda?
d = lambda x: if x:
return 1
else
return 2
但我得到錯誤...
在python中,你怎麼寫一個多行的lambda函數。我試圖如何用多行編寫python lambda?
d = lambda x: if x:
return 1
else
return 2
但我得到錯誤...
使用def
代替。
def d(x):
if x:
return 1
else:
return 2
所有的Python函數是一階對象的(它們可以作爲參數傳遞),lambda
是隻是爲了讓那些短的便捷方式。一般來說,如果超出一行簡單代碼的範圍,則最好使用普通函數定義。即使如此,實際上,如果您將它分配給某個名稱,我總是會使用def
而不是lambda
。 lambda
在定義短的key
函數時確實只是一個好主意,例如與sorted()
一起使用,因爲它們可以內聯放入函數調用中。
請注意,在你的情況下,三元操作員會做這項工作(lambda x: 1 if x else 2
),但我假設這是一個簡化的情況。
(作爲一個代碼高爾夫注意,這也可以在更少的代碼完成爲lambda x: bool(x)+1
- 當然,這是非常難讀和一個壞主意。)
對於難以理解的高爾夫比賽,我更喜歡' - 〜bool(x)',但是擁有相同的字符數:) – JBernardo 2013-02-12 23:39:20
@JBernardo這是我的想法,就像它將要得到的那樣難以理解。先生,先生。 – 2013-02-12 23:41:09
這裏是你正在嘗試做一個正確的版本:
d = lambda x: 1 if x else 2
但我不確定爲什麼要這樣做。
lambda
構建體在Python是limited to an expression only,沒有語句允許
在保持上述約束,則可以使用反斜線字符寫多行的表達,當然:如果你是
>>> fn = lambda x: 1 if x \
else 2
>>> fn(True)
>>> 1
>>> fn(False)
>>> 2
給它一個名字,只需使用正確的'def'語句。 – JBernardo 2013-02-12 23:26:23