廖雪峰老师用 filter来处理筛选素数的疑问

zorro0799 2018-12-02 02:25:38
廖雪峰老师用 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

这是为什么









...全文
525 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zorro0799 2018-12-10
  • 打赏
  • 举报
回复
每天顶一顶!!!!!!
zorro0799 2018-12-05
  • 打赏
  • 举报
回复
没人讲解一下吗
zorro0799 2018-12-03
  • 打赏
  • 举报
回复
不好意思,初学者,所以乱,还有你确实是这样改成 def _odd_iter(): n = 1 while True: print("begin") n = n + 1 print('n1 =%d'%n) yield n print("end") 测的吗,为什么我和和你运行结果不同
ruancan 2018-12-03
  • 打赏
  • 举报
回复
你这个代码的排版真是让人头疼。 尝试了跑了一下,结果是: begin n1 =3 n2=3 3 end begin n1 =4 n2=4 4 end
zorro0799 2018-12-03
  • 打赏
  • 举报
回复
大神们都看不上这个问题?

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧