具體解釋了怎麼用迭代,怎樣用迭代,怎樣轉換成迭代,可以看看
- 列表,字典,元組,字符串,集合可以使用迭代
- 自定義類中可以定義iter方法,來使用迭代
- iter方法意爲可以迭代
- iterator意爲定義迭代的對象(既有__iter__方法,也有__next__方法)
(一)
from collections.abc import Iterable
from collections.abc import Iterator
import time
class Person(object):
def __init__(self):
self.names = list()
self.current_num = 0
def add_person(self,name):
self.names.append(name)
def __iter__(self):
#pass
return PersonsIterator(self)
class PersonsIterator(object):
def __init__(self,obj):
self.obj = obj
self.current_num = 0
def __iter__(self):
pass
def __next__(self):
#pass
#return 12345
if self.current_num < len(self.obj.names):
ret = self.obj.names[self.current_num]
self.current_num += 1
#return self.obj.names[self.current_num]
return ret
else:
raise StopIteration
p1 = Person()
p1.add_person('張三')
p1.add_person('李四')
p1.add_person('王五')
p_iter = iter(p1)
while True:
try:
ret = next(p_iter)
print(ret)
except Exception:
break
運行結果:
(二)
from collections.abc import Iterable
from collections.abc import Iterator
import time
class Person(object):
def __init__(self):
self.names = list()
self.current_num = 0
def add_person(self,name):
self.names.append(name)
def __iter__(self):
#pass
return PersonsIterator(self)
class PersonsIterator(object):
def __init__(self,obj):
self.obj = obj
self.current_num = 0
def __iter__(self):
pass
def __next__(self):
#pass
#return 12345
if self.current_num < len(self.obj.names):
ret = self.obj.names[self.current_num]
self.current_num += 1
#return self.obj.names[self.current_num]
return ret
else:
raise StopIteration
p1 = Person()
p1.add_person('張三')
p1.add_person('李四')
p1.add_person('王五')
print(isinstance(p1,Iterable)) #判斷是否可以迭代
# iter()的作用是調用p1的iter()方法
# next()的作用是調用迭代器的next方法
p_Iterator = iter(p1)
print(isinstance(p_Iterator,Iterator)) #判斷是否爲迭代器
for temp in p1:
print(temp)
time.sleep(1)
運行結果: