【发布时间】:2015-04-01 21:36:46
【问题描述】:
所以最近我们在讲座中讨论了生成器,这是我老师的例子:
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):
# ...
这两个操作会相似吗?
【问题讨论】:
-
是的。为什么不呢?
-
@ColonelThirtyTwo 在讲座中,我的老师说过使用生成器的最常见方法之一是在 for 循环中,并且应该使用
while循环,以免在更大的函数中混淆两者. -
@Tyler:也许你误会了?这里的
while循环是用来让生成器无限循环,而不是区分事物。 -
@Tyler:此外,在循环中使用生成器与在生成器中使用循环是不同的。
-
旁白:
max是一个非常方便的内置函数 (docs) 的名称,因此不是一个很好的参数名称。upper_limit或其他更好的主意。
标签: python python-3.x for-loop while-loop generator