有下面一段代码,分别打印 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
|