我正在尝试创建一个生成器,用于打印列表中的下一个数字。这是一个球拍版本:
(require racket/generator)
(define my-gen
(generator
(_)
(for ([x (list 1 2 3))])
(yield x)))
)
它应该如何运作:
(my-gen) -> 1
(my-gen) -> 2
我也希望能够直接使用该函数而无需在特定点初始化它,因此让生成器成为实际返回结果的函数,而不是像这样:
l = [1, 2, 3]
def myGen():
for element in l:
yield element
g = myGen()
print(next(g))
在python中最好的方法是什么?
答案 0 :(得分:2)
# Generator expression
(exp for x in iter)
# List comprehension
[exp for x in iter]
迭代生成器表达式或列表推导将执行相同的操作。但是,列表推导将首先在内存中创建整个列表,而生成器表达式将动态创建项目,因此您可以将它用于非常大的。
在上面的生成器中将创建生成器对象,以获取您迭代或过滤它的数据。它可能对你有帮助
答案 1 :(得分:1)
>>> 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
答案 2 :(得分:0)
这是你在找什么?
number = 1
while(number<500 +1):
print('(my-gen) ->', number)
number +=1