[Python-Dev] removing nested tuple function parameters

Guido van Rossum guido at python.org
Mon Sep 19 19:21:28 CEST 2005

On 9/19/05, Terry Reedy <tjreedy at udel.edu> wrote:
> I consider the current situation to be a consistency feature.  To a first
> approximation, Python function calls 'pass' objects by name-binding:
> param_name_list = arg_object_list
> Disabling structure unpacking in this assignment would make the language
> slightly more complex.  Someone else posted the same observation in c.l.p.

Maybe, but there are enough differences between parameter/argument
lists and sequences that this consistency sounds rather foolish to me.
 In fact, the feature came from a similar feature in ABC, but in ABC,
parameter lists *were* considered assignment targets -- the outer
level of parentheses was just a special case of tuple unpacking. Not
so in Python, which has keyword parameters, *varargs, **keywords, and
where f(x,) is the same as f(x) -- even though (x,) is a tuple and (x)
is not.

Also, I bet many people will be surprised to know that this code doesn't work:

  add = lambda (x, y): x+y
 print add(1, 2)

> Another thought.  By directly unpacking and not naming a sequence, one
> 'announces' that only the components are of interest and that nothing will
> be done with the sequence object itself.

Fair enough, though I'm not sure what use we can make of that information.

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-Dev mailing list