在 python 中创建生成器

Creating a generator in python

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

  (require racket/generator)

  (define my-gen
    (generator
     (_)
     (for ([x (list 1 2 3))])
       (yield x)))

)

它应该如何工作:

(my-gen) -> 1
(my-gen) -> 2

我还希望能够直接使用该函数而不必在特定点对其进行初始化,因此让生成器成为实际 returns 结果的函数,而不是像这样:

l = [1, 2, 3]
def myGen():
    for element in l:
        yield element

g = myGen()
print(next(g))

在 python 中解决此问题的最佳方法是什么?

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

这是您要找的吗?

number = 1
while(number<500 +1):
    print('(my-gen) ->', number)
    number +=1
# Generator expression
(exp for x in iter)

# List comprehension
[exp for x in iter]

遍历生成器表达式或列表理解会做同样的事情。但是,列表理解将首先在内存中创建整个列表,而生成器表达式将动态创建项目,因此您可以将其用于非常大的项目。

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