Tuple assignment and generators?
Tim Chase
python.list at tim.thechases.com
Thu May 4 15:34:30 EDT 2006
> I don't think he was explicitly wanting to initialize
> things to zero, but rather unpack an arbitrary sequence
> into a tuple (could perhaps be the fibonnacci sequence
> for example).
Ant is correct here...Fibonnaci, digits of pi, the constant
42, an incrementing counter, a series of squares, whatever.
That was my original intent in the matter. Zeros just
happened to be a nice sort of place to start my exercise.
> How about:
>
>
>>>>def zeros(count):
>
> ... for i in range(count):
> ... yield 0
One of the things I was trying to avoid was having to know
(and maintain) the count of items initialized. In the
theoretical world of my example, one could do something like
def counter():
counter = 0
while 1:
yield counter
counter += 1
and then initialize several variables, such as
>>> a,b,c,d,e,f,g = counter()
>>> a,b,c,d,e,f,g
(0,1,2,3,4,5,6)
It's similar to C's auto-numbering of enum values...If I
want to add another entry to a C enum, I just put it there,
and let the language take care of matters. With most of the
provided solutions, I also have to increment the count each
time I add an item to the list.
Diez provided an elegant solution with a decorator
(employing an incredibly ugly sort of hack involving
sniffing the opcode stack behind the scenes) that does what
I was looking for.
I was hoping that there was just some __foo__ property I was
missing that would have been called in the process of tuple
unpacking that would allow for a more elegant solution such
as a generator (or generator method on some object) rather
than stooping to disassembling opcodes. :)
Ah well.
-tkc
More information about the Python-list
mailing list