2013-02-26 95 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