在python中创建一个生成器

时间:2016-01-13 03:02:31

标签: python generator

我正在尝试创建一个生成器,用于打印列表中的下一个数字。这是一个球拍版本:

  (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中最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

# Generator expression
(exp for x in iter)

# List comprehension
[exp for x in iter]

迭代生成器表达式或列表推导将执行相同的操作。但是,列表推导将首先在内存中创建整个列表,而生成器表达式将动态创建项目,因此您可以将它用于非常大的。

在上面的生成器中将创建生成器对象,以获取您迭代或过滤它的数据。它可能对你有帮助

答案 1 :(得分:1)

使用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

答案 2 :(得分:0)

这是你在找什么?

number = 1
while(number<500 +1):
    print('(my-gen) ->', number)
    number +=1