Python lambda不接受元组参数

Dmi*_*try 41 python eclipse lambda tuples pydev

我在两台PC上运行带有PyDev v2.6插件的Eclipse SDK v3.6,包括Linux和Windows.

我想传递一个元组作为参数,就像(只是示例):

foo = lambda (x,y): (y,x)
print (foo((1,2)))
Run Code Online (Sandbox Code Playgroud)

这适用于Linux并提供结果:

(2,1)

在Windows上它出现错误:

foo = lambda (x,y): (y,x)
             ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

如何解决问题?提前致谢...

感谢interjay和他对PEP 3113的引用,我发现从3.0版本的Python中不推荐使用元组参数.

所以,代码没有工作,看起来像

foo = lambda (x,y): (y,x)
print (foo((1,2)))
Run Code Online (Sandbox Code Playgroud)

现在适用于Python的2.7版和3.0版,看起来像

foo = lambda (x,y): (y,x)
             ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

其中接受是tupes列表反正.

int*_*jay 92

您可能在Windows上运行Python 3.x,在Linux上运行Python 2.x. 在Python 3中删除了解包元组参数的能力:参见PEP 3113.

您可以手动解压缩元组,这对Python 2.x和3.x都有效:

foo = lambda xy: (xy[1],xy[0])
Run Code Online (Sandbox Code Playgroud)

要么:

def foo(xy):
    x,y = xy
    return (y,x)
Run Code Online (Sandbox Code Playgroud)

  • 这实在是太丑陋了。我永远对 Python 情有独钟,但这太糟糕了。 (11认同)
  • 谢谢你的回答.为了便于阅读,有没有人知道一个漂亮的函数式编程方法将元组参数转换为两个单独的参数? (5认同)
  • 或者`foo = lambda x,y:(y,x)` - >`foo(*(1,2))`(在Py3上工作,我不知道Py2 ......) (3认同)
  • 我也认为 python 需要改进这一点。超级丑 (3认同)
  • @JoelCross“为了可读性,有谁知道一种漂亮的函数编程方法可以将元组参数转换为两个单独的参数?” 抱歉晚了 5 年才回复……您正在寻找的函数叫做 curry!Curry 接受一个对的函数并返回一个有 2 个参数的函数。还有 curry3,它将 3 元组的函数转换为 3 个参数的函数等。 https://hoogle.haskell.org/?hoogle=curry 在像 python 这样的动态类型语言中,我们通常可以定义 autoCurry,它对于任何 N,将 N 元组函数转换为 N 个参数的函数。 (3认同)
  • 在 python3 中被删除了,伙计,这很伤心。 (2认同)