Reputation: 1304
I am trying to create a generator that prints the next number on the list. This is a racket version:
(require racket/generator)
(define my-gen
(generator
(_)
(for ([x (list 1 2 3))])
(yield x)))
)
How it should work:
(my-gen) -> 1
(my-gen) -> 2
I also want to be able to use the function directly without having to initialize it at a specific point, so having the generator be the function that actually returns the result, as opposed to something like this:
l = [1, 2, 3]
def myGen():
for element in l:
yield element
g = myGen()
print(next(g))
What is the best way to go about this in python?
Upvotes: 1
Views: 511
Reputation: 149
# Generator expression
(exp for x in iter)
# List comprehension
[exp for x in iter]
Iterating over the generator expression or the list comprehension will do the same thing. However, the list comprehension will create the entire list in memory first while the generator expression will create the items on the fly, so you are able to use it for very large.
In above generator will create generator object, to get data you have iterate or filter over it. It may be help you
Upvotes: 2
Reputation: 21
Is this what you are looking for?
number = 1
while(number<500 +1):
print('(my-gen) ->', number)
number +=1
Upvotes: 0
Reputation: 369424
Using functools.partial
:
>>> import functools
>>> l = [1, 2, 3]
>>> my_gen = functools.partial(next, iter(l))
>>> my_gen()
1
>>> my_gen()
2
>>> my_gen()
3
>>> my_gen()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Upvotes: 1