所以最近我们在讲座中讨论了发电机,这是我老师的例子:
from predicate import is_prime
def primes(max = None):
p = 2
while max == None or p <= max:
if is_prime(p):
yield p
p += 1
如果我们运行
a = primes(10)
print(next(a) --> 2
print(next(a) --> 3
...
因此,这个特定的生成器示例使用while
循环并基于此运行函数,但生成器是否也可以有for
循环?比如说
for i in range(2, max+1):
# ...
这两者的运作方式是否相似?
答案 0 :(得分:3)
关于生成器的唯一特殊之处是yield
关键字,并且在调用生成器next()
函数之间暂停。
你可以使用你喜欢的任何循环结构,就像在'普通'python函数中一样。
使用for i in range(2, max + 1):
与while
循环的工作方式相同,前提是max
设置为None
以外的其他内容:
>>> def primes(max):
... for p in range(2, max + 1):
... if is_prime(p):
... yield p
...
>>> p = primes(7)
>>> next(p)
2
>>> next(p)
3
>>> next(p)
5
>>> next(p)
7
>>> next(p)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration