python - 为什么在 python 的 send 方法中我们需要“启动”一个生成器,而在普通方法中我们不需要这样做?
问题描述
我正在尝试学习生成器的发送方法,但我对它的功能感到困惑。下面是代码。我想了解为什么我们需要通过传递“无”值或使用下一个方法(print_successive_primes)来初始化生成器——两者都给出相同的结果?但是如果我通常使用生成器(如果是solve_number_10)我只是简单地传递参数并且生成器初始化自己。
我在这里读过这个答案 python 生成器“发送”功能的目的?
但这并不能消除我的疑问
import math
def is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
def get_primes():
number = yield
#print(number)
while True:
if is_prime(number):
number = yield number
number += 1
def print_successive_primes(iterations, base=10):
prime_generator = get_primes()
#print(next(prime_generator))
print(prime_generator.send(None))
#print(prime_generator.send(12))
for power in range(iterations):
print(prime_generator.send(base ** power))
print_successive_primes(4)
####
def solve_number_10():
# She *is* working on Project Euler #10, I knew it!
total = 2
for next_prime in get_primes(3):
if next_prime < 800000:
total += next_prime
else:
print(total)
return
解决方案
推荐阅读
- excel - 从 10 个列表框中选择。运行时错误“390”
- javascript - 在 Web javascript 中获取云 Firestore 集合的快照大小
- javascript - 点击时从动态添加的元素中获取数据
- java - 如何使用 Java 在 cmd 窗口上显示 .txt 文件的内容?
- azure-ad-graph-api - Azure AD Graph API:无法在任何函数下使用 StartsWith
- c# - 使用 ASP.Net MVC 5 批量编辑和更新 JQuery 数据表行
- pandas - 如何显示叶特征组中的数据总和
- vba - VBA 无法在所有工作表中执行
- c# - 如何使用 asp.net core 从远程服务器下载文件?
- file - 如何避免 TStringList.SaveToFile 覆盖我以前的更改?