On 08/03/2011 03:25 AM, Steven D'Aprano wrote:
gc wrote:
Target lists using comma separation are great, but they don't work
very well for this task. What I want is something like
a,b,c,d,e = *dict()
a, b, c, d, e = [dict() for i in range(5)]
Unfortunately there is no way of doing so without counting the assignment
targets. While slightly ugly, it doesn't seem ugly enough to justify the
extra complexity of special syntax for such a special case.
I understand that in Py3k (and perhaps back-ported into later 2.x
series?) one can do something like
a, b, c, d, e, *junk = (dict() for _ in range(9999))
to prevent the need to count. However, I was disappointed with
all the generator-ification of things in Py3k, that this "and the
rest" syntax slurps up the entire generator, rather than just
assigning the iterator. That would much more tidily be written as
a,b,c,d,e, *more_dict_generator = (dict() for _ in itertools.count())
(itertools.count() happening to be a infinite generator). I can
see the need to slurp if you have things afterward:
a,b,c, *junk ,d,e = iterator(...)
but when the "and the rest" is the last one, it would make sense
not to force a slurp.
-tkc
--
http://mail.python.org/mailman/listinfo/python-list