2012-10-19 21 views
1

我嘗試使用map調用的lambda函數初始化數組,並且在我的surprize IF-ELSE在lambda中無效。lambda內的條件

a = map((lambda x: if (len(aDict[x])==m): return aDict[x] else: return false), 
     aDict.keys()) 

這是錯誤我得到

File "objects.py", line 63 
a = map((lambda x: if (len(aDict[x])==m): return aDict[x] else: return false), 
        ^
SyntaxError: invalid syntax 

這是什麼不起作用的原因是什麼?


編輯:

現在我發現了有趣的選擇表達

>>> False and 'one' or 'two' 
'two' 
>>> True and 'one' or 'two' 
'one' 

非常有趣......這是一個班輪表達,這就是爲什麼它活像

+0

您的編輯工作,因爲Python返回在布爾表達式中評估的最後一項,布爾評估也可能時短路。例如,'''和'a''返回'''''。這比讀寫if/else要清楚得多,所以除非你出於性能原因需要它,否則它可能不是最好的選擇。 –

回答

5

你可以在lambda表達式中使用這種語法,你也不能明確地返回。試試這個:

lambda x, m: aDict[x] if (len(aDict[x])==m) else False 

Lambda函數隱含地返回評估其中的代碼所產生的值。代碼必須可以表達爲單個複合表達式(又名單線程)。

+0

如果if條件爲真,我希望它返回x。否則爲假。如何返回X? – alinsoar

+0

我放的是什麼,你似乎想從你的問題中得到什麼。如果你只想使用'x',可以使用'lambda x,m:x if(len(aDict [x])== m)else False。 –

+0

@alinsoar你不會從lambda返回任何東西。你只是把一個表達式... – glglgl