web-dev-qa-db-fra.com

Python lambda n'accepte pas l'argument Tuple

J'utilise Eclipse SDK v3.6 avec le plugin PyDev v2.6 sur deux PC, avec Linux et Windows.

Je voudrais passer un Tuple comme argument, comme (juste un exemple):

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

Cela fonctionne sous Linux et donne le résultat:

(2,1)

Sous Windows, une erreur se produit:

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

Comment résoudre le problème?

45
Dmitry

Vous exécutez probablement Python 3.x sous Windows et Python 2.x sous Linux. La possibilité de décompresser les paramètres de tuple a été supprimée dans Python 3: Voir PEP 311 .

Vous pouvez décompresser manuellement le tuple à la place, ce qui fonctionnerait sur les deux Python 2.x et 3.x:

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

Ou:

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