* for generic unpacking and not just for arguments?
Tim Chase
python.list at tim.thechases.com
Sun Nov 29 14:45:18 EST 2009
> The feature is available in Python 3.x:
>
>>>> a, b, *c = 1, 2, 3, 4, 5
>>>> a, b, c
> (1, 2, [3, 4, 5])
>>>> a, *b, c = 1, 2, 3, 4, 5
>>>> a, b, c
> (1, [2, 3, 4], 5)
This is a nice feature of 3.x but I'm disappointed (especially in
light of the move to make more things iterators/generators), that
the first form unpacks and returns a list instead returning the
unexhausted generator. There are times I've wanted to write
something like
def powers_of_n(n=2):
p = 0
while True:
yield n ** p
p += 1
def linear(i=0, step=1):
while True:
yield i
i += step
CONST_A, CONST_B, CONST_C, *_ = linear()
OPT_A, OPT_B, OPT_C, *_ = powers_of_n()
because adding another CONST or OPT becomes trivial (just add it
to the list of names). I currently have to do something like
CONST_A, CONST_B, CONST_C = range(3)
and then remember to bump up my range() parameter when I create a
new value on the left. It's not bad to see here, but I often
have times where N>60 constants and tweaking something in an
alphabetically sorted list may require scrolling to see/remember
the range() change.
However, because 3.x tries to make a list out of it, this doesn't
help me at all because my generator is infinite. Boo.
Diez Roggisch gave me a beautiful (okay, the implementation code
is a bit ugly, but the final product's simplicity achieves
elegance) solution to my similar want for 2.x here:
http://www.mail-archive.com/python-list@python.org/msg87022.html
-tkc
More information about the Python-list
mailing list