有下面一段代码,分别打印 1 1 2 3 5 和 0 0 0 0 0,请问后面一个迭代器为什么不会打印 0 1 2 3 4 ?
class Fib(object): def __init__(self): self.prev = 0 self.curr = 1 def next(self): value = self.curr self.curr += self.prev self.prev = value return value def __iter__(self): return self class T(object): def __iter__(self): return self def next(self): for i in range(5): return i f = Fib() t = T() print next(f) print next(f) print next(f) print next(f) print next(f) print next(t) print next(t) print next(t) print next(t) print next(t)
1 quinoa42 2018-02-17 01:23:35 +08:00 因为已经 return 了,后面 i=1,2,3,4 根本不会运行 |
![]() | 2 wwqgtxx 2018-02-17 01:25:45 +08:00 via iPhone yield 才是给迭代器用的 |
3 KKKKKK 2018-02-17 01:50:51 +08:00 via Android 查一查 magic method Next 调用的是 __next__ 这个方法 |
4 lrxiao 2018-02-17 03:09:59 +08:00 generator_instance.gi_frame.f_locals |
![]() | 8 ch3nOr 2018-02-17 13:23:57 +08:00 #1 说的对,每次你用 next(t) 的候,就用一次 t.next()。你可以在[]( http://pythontutor.com/visualize.html) 下你的代,可化你的行步。 |
![]() | 9 wallriding 2018-02-17 13:24:50 +08:00 for i in range(5): return i 楼主你再看看? |
![]() | 10 ch3nOr 2018-02-17 13:25:19 +08:00 Fib 的,了前迭代的,所以完全 |
11 flowarmor OP @wallriding 嗯哼,昨夜太困大脑短路了。 |
![]() | 12 frostming 2018-02-23 17:07:02 +08:00 |