2013-02-12 182 views
3

在python中,你怎麼寫一個多行的lambda函數。我試圖如何用多行編寫python lambda?

d = lambda x: if x: 
       return 1 
       else 
       return 2 

但我得到錯誤...

+6

給它一個名字,只需使用正確的'def'語句。 – JBernardo 2013-02-12 23:26:23

回答

12

使用def代替。

def d(x): 
    if x: 
     return 1 
    else: 
     return 2 

所有的Python函數是一階對象的(它們可以作爲參數傳遞),lambda是隻是爲了讓那些短的便捷方式。一般來說,如果超出一行簡單代碼的範圍,則最好使用普通函數定義。即使如此,實際上,如果您將它分配給某個名稱,我總是會使用def而不是lambdalambda在定義短的key函數時確實只是一個好主意,例如與sorted()一起使用,因爲它們可以內聯放入函數調用中。

請注意,在你的情況下,三元操作員會做這項工作(lambda x: 1 if x else 2),但我假設這是一個簡化的情況。

(作爲一個代碼高爾夫注意,這也可以在更少的代碼完成爲lambda x: bool(x)+1 - 當然,這是非常難讀和一個壞主意。)

+4

對於難以理解的高爾夫比賽,我更喜歡' - 〜bool(x)',但是擁有相同的字符數:) – JBernardo 2013-02-12 23:39:20

+1

@JBernardo這是我的想法,就像它將要得到的那樣難以理解。先生,先生。 – 2013-02-12 23:41:09

2

這裏是你正在嘗試做一個正確的版本:

d = lambda x: 1 if x else 2 

但我不確定爲什麼要這樣做。

4

lambda構建體在Python是limited to an expression only,沒有語句允許

在保持上述約束,則可以使用反斜線字符寫多行的表達,當然:如果你是

>>> fn = lambda x: 1 if x \ 
        else 2 
>>> fn(True) 
>>> 1 
>>> fn(False) 
>>> 2