Am using Django voting package and when i use the method get_top() in the shell, it returns something like "generator object at 0x022f7AD0, i've never seen anything like this before, how do you access it and what is it?
my code:
v=Vote.objects.get_top(myModel, limit=10, reversed=False)
print v
<generator object at 0x022f7AD0>
NB: I thought get_top will just return a nice list of myModel, which i can do something like v.name etc
If you want a list, just call list() on your generator object.
A generator object in python is something like a lazy list. The elements are only evaluated as soon as you iterate over them. (Thus calling list on it evaluates all of them.)
For example you can do:
>>> def f(x):
... print "yay!"
... return 2 * x
>>> g = (f(i) for i in xrange(3)) # generator comprehension syntax
>>> g
<generator object <genexpr> at 0x37b6c0>
>>> for j in g: print j
...
yay!
0
yay!
2
yay!
4
See how f is evaluated only as you iterate over it. You can find excellent material on the topic here: http://www.dabeaz.com/generators/
A generator is a kind of iterator. An iterator is a kind of iterable object, and like any other iterable,
You can iterate over every item using a for loop:
for vote in Vote.objects.get_top(myModel, limit=10, reversed=False):
print v.name, vote
If you need to access items by index, you can convert it to a list:
top_votes = list(Vote.objects.get_top(myModel, limit=10, reversed=False))
print top_votes[0]
However, you can only iterate over a particular instance of an iterator once (unlike a more general iterable object, like a list):
>>> top_votes_generator = Vote.objects.get_top(myModel, limit=3)
>>> top_votes_generator
<generator object at 0x022f7AD0>
>>> list(top_votes_generator)
[<Vote: a>, <Vote: b>, <Vote: c>]
>>> list(top_votes_generator)
[]
For more on creating your own generators, see http://docs.python.org/tutorial/classes.html#generators
Hmmmm
I've read this and this and things are quiet clear now;
Actually i can convert generators to list by just doing
mylist=list(myGenerator)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With