Python lambda不接受元组参数

时间:2012-07-04 11:34:46

标签: 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)))

这适用于Linux并提供结果:

  
    

(2,1)

  

在Windows上出现错误:

foo = lambda (x,y): (y,x)
             ^
SyntaxError: invalid syntax

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

解决方案

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

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

accepts = filter(lambda q1, q2: (q1, q2) in states, [(q1, q2) for q1 in D1.accepts for q2 in D2.accepts])

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

accepts = filter(lambda q: (q1, q2) in states, [(q1, q2) for q1 in D1.accepts for q2 in D2.accepts])

接受无论如何都是一个tupes列表。

1 个答案:

答案 0 :(得分:71)

您可能在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)