Python lambda no acepta el argumento de la tupla

Estoy ejecutando Eclipse SDK v3.6 con el complemento PyDev v2.6 en dos PC, con Linux y Windows.

Me gustaría pasar una tupla como argumento, como (solo ejemplo):

foo = lambda (x,y): (y,x) print (foo((1,2))) 

Esto funciona en Linux y da el resultado:

(2,1)

En Windows se levanta un error:

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

¿Como resolver el problema? Gracias por adelantado…

Solución

Gracias a Interjay y su referencia a PEP 3113 encontré que un parámetro de tupla está obsoleto de la versión 3.0 de Python.

Por lo tanto, el código que no funcionó y se veía como

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

Ahora funciona tanto en la versión 2.7 como en la versión 3.0 de Python y se ve como

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

Donde acepta es una lista de tupes de todos modos.

Probablemente esté ejecutando Python 3.x en Windows, y Python 2.x en Linux. La capacidad de descomprimir los parámetros de la tupla se eliminó en Python 3: consulte PEP 3113 .

En su lugar, puede descomprimir manualmente la tupla, lo que funcionaría tanto en Python 2.xy 3.x:

 foo = lambda xy: (xy[1],xy[0]) 

O:

 def foo(xy): x,y = xy return (y,x)