廖雪峰老师用 filter来处理筛选素数的疑问
廖雪峰老师用 filter来处理筛选素数没有看懂,
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431821084171d2e0f22e7cc24305ae03aa0214d0ef29000
有几个疑问
it = filter(_not_divisible(n), it) # 构造新序列
这一句构造新的序列的意思是指,已经在it上加了一个过滤器,但现在并不有生效,如果下一次开始使用netx(it),这个过滤器才开始工作,是这样的吗,也就是说在下一次调用_odd_iter()后还要对这个返回结果使用上次的过滤器,符合结果的才返回
我把
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
改成了
def _odd_iter():
n = 1
while True:
print("begin")
n = n + 1
print('n1 =%d'%n)
yield n
print("end")
把n=n+2改成n=n+1
def primes():
yield 2
it = _odd_iter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
print('n2=%d'%n)
yield n
运行程序,当n=3,n=n+1为4时,输出是
begin
n1=4
end
begin
n1=5
n2=5
不是我想象中的
begin
n1=4
n2=4
这是为什么