Tuple parameter unpacking in 3.x
Nick Craig-Wood
nick at craig-wood.com
Sat Oct 4 06:30:04 EDT 2008
Martin Geisler <mg at daimi.au.dk> wrote:
> I just tried running my code using "python2.6 -3" and got a bunch of
>
> SyntaxWarning: tuple parameter unpacking has been removed in 3.x
>
> warnings. I've read PEP-3113:
>
> http://www.python.org/dev/peps/pep-3113/
>
> but I'm still baffled as to why you guys could remove such a wonderful
> feature?!
I don't think many people will miss tuple unpacking in def statements.
I think the warning is probably wrong anyway - you just need to remove
a few parens...
> ci.addCallback(lambda (ai, bi): ai * bi)
> map(lambda (i, s): (field(i + 1), s), enumerate(si))
On
Python 3.0rc1 (r30rc1:66499, Oct 4 2008, 11:04:33)
>>> f = lambda (ai, bi): ai * bi
File "<stdin>", line 1
f = lambda (ai, bi): ai * bi
^
SyntaxError: invalid syntax
But
>>> f = lambda ai, bi: ai * bi
>>> f(2,3)
6
Likewise
>>> lambda (i, s): (field(i + 1), s)
File "<stdin>", line 1
lambda (i, s): (field(i + 1), s)
^
SyntaxError: invalid syntax
>>> lambda i, s: (field(i + 1), s)
<function <lambda> at 0xb7bf75ec>
>>>
So just remove the parentheses and you'll be fine.
I have to say I prefer named functions, but I haven't done much
functional programming
def f(ai, bi):
return ai * bi
ci.addCallback(f)
def f(i, s):
return field(i + 1), s
map(f, enumerate(si))
PEP-3113 needs updating as it is certainly confusing here! 2to3 is
doing the wrong thing also by the look of it.
--
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick
More information about the Python-list
mailing list