python - Python:为什么这个生成器不能从 yield 继续?
问题描述
我试图在 python 中制作一个素数生成器,但我遇到了一个问题。这是我的代码
def prime_generator():
n = 2
while n < 100:
for i in range(2, n):
if n % i == 0:
break
else:
yield n
n += 1
我认为这应该生成小于 100 的素数。它由一个 while 循环组成,该循环采用n,从 2 开始,并使用一个 for 循环来确定它是否是素数。如果n不是素数,它将n增加 1 并继续循环,直到它产生一个素数 n。
但是,每当我print(next(prime_generator()))
多次运行时,我只会得到一堆 2s 作为输出。通过调试器单步执行它,我注意到每次 python 运行next(prime_generator())
它都会重新启动生成器并重置n = 2 而不是离开yield n
它,然后应该增加n并继续 while 循环。为什么会重启?它不应该从 yield 继续,因为它是一个生成器吗?
解决方案
调用prime_generator()
会创建生成器,因此您每次都将创建一个生成器。相反,请执行以下操作:
pg = prime_generator()
print(next(pg))
print(next(pg))
print(next(pg))
然后你会得到你所期待的
推荐阅读
- java - CompletableFuture 的意外行为
- swift - 如何从 CollectionView 中找到图像的名称?
- kubernetes - 我们如何在 prometheus 中导出 cadvisor 指标
- javascript - VueJS如何在for循环中每行3个项目只选择一个项目?
- python - 将图从pylab转换为base64而不缓存它
- c# - 找出 Last_Insert_Id() 使用 c# 和 MySql 存储过程(在数据访问层 MVC 中)
- javascript - 6003 Sinch - React Js
- r - 为 R 中的某些值计算数据框中的行百分比差异
- javascript - python的json.dumps输出对javascript安全吗?
- javascript - Javascript:将 HSV 转换为 RGB,输出正确但已打乱