1

我可以知道为什么下面的代码没有打印出来[1,2,3,1,2,3]。相反,它会引发异常。你能告诉我如何让它工作吗?

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

如果我尝试以下操作,它会起作用:

test1 = lambda x: x * 2
print test1(x) 
4

3 回答 3

3

这有效

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)

于 2013-02-27T11:11:06.597 回答
3

apply将采用它的第二个参数(应该是一个元组/列表)并将这个元组的每个元素作为位置参数传递给您apply作为第一个参数传递给的对象。

这意味着如果x = [1,2,3]你打电话

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

apply将使用参数12和调用 lambda 函数3,这将失败,因为 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,)) 
于 2013-02-27T11:04:30.210 回答
0

也许我不明白你的问题,但如果你只需要“乘”列表,那么只需将它相乘:

xx = [1,2,3]
print(xx * 2)
于 2013-02-27T10:38:20.200 回答