【问题标题】:Python lambda does not accept tuple argument [duplicate]Python lambda不接受元组参数[重复]
【发布时间】: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)

标签: python lambda tuples


【解决方案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 情有独钟,但这太糟糕了。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
相关资源
最近更新 更多