
有下面一段代码,分别打印 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 Feb 17, 2018 因为已经 return 了,后面 i=1,2,3,4 根本不会运行 |
2 wwqgtxx Feb 17, 2018 via iPhone yield 才是给迭代器用的 |
3 KKKKKK Feb 17, 2018 via Android 查一查 magic method Next 调用的是 __next__ 这个方法 |
4 lrxiao Feb 17, 2018 generator_instance.gi_frame.f_locals |
8 ch3nOr Feb 17, 2018 #1 说的对,每次你用 next(t) 的候,就用一次 t.next()。你可以在[]( http://pythontutor.com/visualize.html) 下你的代,可化你的行步。 |
9 wallriding Feb 17, 2018 for i in range(5): return i 楼主你再看看? |
10 ch3nOr Feb 17, 2018 Fib 的,了前迭代的,所以完全 |
11 flowarmor OP @wallriding 嗯哼,昨夜太困大脑短路了。 |
12 frostming Feb 23, 2018 |