2013-06-04 127 views
1

我有一個包含一些拉姆達元素太列表:解釋lambda表達式的列表

l=['A',lambda x:x*2,lambda x:x*3] 

如何追加這個名單到另一個執行拉姆達(類似下面 - 顯然,這一個不工作)後:

m=list(k=k(3) if isinstance(k,types.FunctionType) else k for k in l) 

預期的的是:

m=['A',6,9] 

這可能嗎?

+4

你爲什麼要這麼做? – squiguy

回答

6

您可以使用callable

>>> l = ['A', lambda x:x*2, lambda x:x*3] 
>>> m = [k(3) if callable(k) else k for k in l] 
>>> m 
['A', 6, 9] 
+0

一個應該記住,可調用的類是真的太'''isinstance(A,類型)和調用(一)== True''' – oleg

-3

您確定要將此列表附加到另一個列表,還是創建一個新列表?就在 情況下,你碰巧使用的Python版本,其中調用被棄用:

for element in l: 
    m.append(element(3) if hasattr(element, '__call__') else element) 
+0

使用'''callable'''而不是'''hasattr(元素「 __call __')''' – oleg

+1

@oleg主要問題是這種使用的三元'if'時,如果使用的是Python3.0或3.1的結果不被 – jamylak

+1

你應該使用'isinstance(元素,collections.Callable)'代替''callable()'。在3.2+'callable()'中復活了。 –