2013-02-26 76 views
1

我可以知道爲什麼下面的代碼不打印[1,2,3,1,2,3]。相反,它會引發異常。你能告訴我如何使它工作。jython lambda函數

x = [1,2,3] 
print apply(lambda x: x * 2, (x)) 

,如果我嘗試以下方法,它的工作原理:

test1 = lambda x: x * 2 
print test1(x) 
+0

請編輯您的帖子曾經棄用,包括完整的代碼不工作,如果可能的話,除了你。 – 2013-02-26 12:40:37

+0

'應用((lambda x:x * 2),(x))'做些什麼? – User 2013-02-27 11:01:57

回答

0

也許我不明白你的問題,但如果你需要的是爲「正片疊底」列表中,然後簡單地乘以:

xx = [1,2,3] 
print(xx * 2) 
+0

我只想看看lambda函數是如何工作的。不管怎麼說,還是要謝謝你。 – 2013-02-28 05:15:32

2

apply將其第二個參數(其應該是一個元組/列表),並把該元組的每個元素作爲位置參數到你傳遞給apply作爲第一變元的對象噸。

這意味着,如果x = [1,2,3]和你打電話

apply(lambda x: x * 2, (x)) 

apply將調用拉姆達函數的參數123,這將失敗,因爲lambda函數只需要一個參數。


有它的工作,你應該,但x成一個元組或列表:

print apply(lambda x: x * 2, [x]) 

# note the extra ','. (x,) is a tuple; (x) is not. 
# this is probably the source of your confusion. 
print apply(lambda x: x * 2, (x,)) 
+0

感謝Dominic。有用。 – 2013-02-28 05:13:31

2

這工作

x = [1,2,3] 

print apply(lambda x: x * 2, [x]) 

然而,這可能值得注意的是apply是因爲Python 2.3

http://docs.python.org/2/library/functions.html#apply

Deprecated since version 2.3: Use function(*args, **keywords) instead of apply(function, args, keywords). (see Unpacking Argument Lists)

+0

謝謝你讓我知道,軒。 – 2013-02-28 05:14:13