Python lambda不接受元组参数[重复]
Posted
技术标签:
【中文标题】Python lambda不接受元组参数[重复]【英文标题】:Python lambda does not accept tuple argument [duplicate] 【发布时间】:2012-07-04 21:53:19 【问题描述】:我在两台 PC 上运行带有 PyDev v2.6 插件的 Eclipse SDK v3.6,Linux 和 Windows。
我想传递一个元组作为参数,例如:
foo = lambda (x,y): (y,x)
print (foo((1,2)))
这适用于 Linux 并给出正确的结果:
> (2,1)
在 Windows 上会出现错误:
foo = lambda (x,y): (y,x)
^
SyntaxError: invalid syntax
如何解决问题?
【问题讨论】:
真的吗?在 Win 机器上为我工作。 两者的 Python 版本相同? "我发现 Python 3.0 版本弃用了一个元组参数" 更准确地说,删除的是元组参数 "unpacking"。它在 3.0 中并未被弃用——它在 3.0 中被删除。 解决方法不对。应该是lambda q:(q[0],q[1]) in states
(interjay 就是这么描述的)。
如果您只是在做您在第一个代码 sn-p 中显示的内容,请使用 def
。如果您将 lambda 应用于可迭代的元组,itertools
'starmap
会自动为您解包,例如,starmap(lambda x, y: x + y, ((1, 2), (3, 4), (5, 6))) # => (3, 7, 11)
【参考方案1】:
您可能在 Windows 上运行 Python 3.x,在 Linux 上运行 Python 2.x。 Python 3 中删除了解压元组参数的功能:请参阅 PEP 3113。
您可以改为手动解包元组,这在 Python 2.x 和 3.x 上都可以使用:
foo = lambda xy: (xy[1],xy[0])
或者:
def foo(xy):
x,y = xy
return (y,x)
【讨论】:
或foo = lambda x, y: (y, x)
-> foo(*(1,2))
(适用于Py3,我不知道Py2...)
感谢您的回答。为了可读性,有人知道将元组参数转换为两个单独参数的漂亮的函数式编程方法吗?
你的代码在我执行lambda xy: (xy[0] + xy[1])
时抛出TypeError: <lambda>() takes 1 positional argument but 2 were given
错误
@Apurva 我对此进行了测试,它可以工作。您一定是错误地调用了 lambda。
这太丑陋了。我总是对 Python 情有独钟,但这太糟糕了。以上是关于Python lambda不接受元组参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章