2017-01-30 93 views
0

我覺得這個問題是類似This oneLAMBDA返回內存地址

return(lambda x: "Even" if number % 2 == 0 else "Odd") 

賽道我可以解決這樣的問題:

if number % 2 == 0: 
    return("Even") 
else: 
    return("Odd") 

,但我想有一個整齊的一行爲了這。現在我卡住了,我的代碼返回

at 0x7fb0378fb0d0> 

我在想什麼?

+5

題外話,但我不會真的把這種「整潔」,你正在傷害你自己的保養(和輕微的性能),沒有真正的好處 – Sayse

+2

'高清˚F (x):如果x%2 == 0則返回「Even」,否則「Odd」'也是1-liner,更具可讀性。我沒有看到這個特定lambda的合理用例。 –

+0

同意上面的註釋,一般不使用lambda,除非你需要匿名函數(例如作爲排序的關鍵) –

回答

1

Lambda返回一個函數,所以你得到函數的地址。

試試這個:

return ((lambda x: "Even" if x % 2 == 0 else "Odd")(2)) 

在這裏,您執行lambda函數,而不是隻返回函數本身。

您可以lambda函數賦值給一個變量是這樣的:

func = lambda x: "Even" if x % 2 == 0 else "Odd" 

然後調用該函數與相關參數:

func(2) 
+0

非常有用。謝謝。爲什麼我需要追加參數而不是將其集成到lambda表達式中? –

+0

考慮x作爲傳遞給lambda的參數,誰是那個x?你需要使用該參數調用lambda,在這種情況下它是2。 –

0

拉姆達回報功能

試試這個

f = lambda (x :"Even" if x % 2 == 0 else "Odd") 
print f(2) 

希望它有幫助!

2

你根本不應該使用lambda。只要做到

return 'Even' if number % 2 == 0 else 'Odd' 

return ('Even', 'Odd')[number % 2]