[Python-Dev] Extending tuple unpacking

Gustavo Niemeyer gustavo at niemeyer.net
Fri Oct 7 19:56:10 CEST 2005


> Someone should really write up a PEP -- this was just discussed a week
> or two ago.

Heh.. I should follow the list more closely.

> I personally think this is adequately handled by writing:
> 
>   (first, second), rest = something[:2], something[2:]

That's an alternative indeed. But the the proposed way does look better:

  for item in iterator:
      (first, second), rest = item[2:], item[:2]
      ...

vs.

  for first, second, *rest in iterator:
     ...

> I believe that this wish is an example of "hypergeneralization" -- an
> incorrect generalization based on a misunderstanding of the underlying
> principle.

Thanks for trying so hard to say in a nice way that this is not
a good idea. :-)

> Argument lists are not tuples [*] and features of argument lists
> should not be confused with features of tuple unpackings.

Do you agree that the concepts are related?

For instance:

  >>> def f(first, second, *rest):
  ...   print first, second, rest
  ...
  >>> f(1,2,3,4)
  1 2 (3, 4)

  >>> first, second, *rest = (1,2,3,4)
  >>> print first, second, rest
  1 2 (3, 4)

> [*] Proof: f(1) is equivalent to f(1,) even though (1) is an int but
> (1,) is a tuple.

"Extended *tuple* unpacking" was a wrong subject indeed. This is
general unpacking, since it's supposed to work with any sequence.

-- 
Gustavo Niemeyer
http://niemeyer.net


More information about the Python-Dev mailing list