迭代器
可迭代对象
数字类型不是一个可迭代对象
from collection import Iterable
# 判断是否为可迭代对象,返回True则可迭代
isinstance([11,22,33],Iterable)
实现一个可迭代对象
from collections import Iterable
class Classmate(object):
def __init__(self):
self.names = list()
def add(self,name):
self.names.appdend(name)
def __iter__(self):
"""此方法能把实例化的对象变成一个可迭代对象"""
return ClassIterator(obj)
class ClassIterator(object):
def __init__(self,obj):
self.obj = obj
def __iter__(self):
pass
def __next__(self):
return obj.names[current_num]
classmate = Classmate()
classmate.add("老王")
classmate.add("老赵")
classmate.add("老章")
for name in classmate:
print(names)
print("判断是否为迭代对象",isinstance(classmate,Iterable))
#用iter方法调用实例化后的对象
classmate_iterator = iter(classmate)
print("判断是否为迭代器",isinstance(classmate_iterator,Iterator))
print(next(classmator_iterator))
完善迭代器
from collections import Iterable
class Classmate(object):
def __init__(self):
self.names = list()
def add(self,name):
self.names.appdend(name)
def __iter__(self):
"""此方法能把实例化的对象变成一个可迭代对象"""
return ClassIterator(obj)
class ClassIterator(object):
def __iter__(self,obj):
self.obj = obj
self.currentnum = 0
def __next__(self):
if self.current_num < len(self.obj.names):
set = self.obj.names[self.current_num]
self.current_num += 1
return ret
else:
raise StopIteration
classmate = Classmate()
classmate.add("老王")
classmate.add("老赵")
classmate.add("老章")
for name in classmate:
print(names)
print("判断是否为迭代对象",isinstance(classmate,Iterable))
#用iter方法调用实例化后的对象
classmate_iterator = iter(classmate)
print("判断是否为迭代器",isinstance(classmate_iterator,Iterator))
print(next(classmator_iterator))
简便写法
from collections import Iterable
class Classmate(object):
def __init__(self):
self.names = list()
self.current_num = 0
def add(self,name):
self.names.append(name)
def __iter__(self):
"""此方法能把实例化的对象变成一个可迭代对象"""
return self
def __next__(self):
if self.current_num < len(self.names):
ret = self.names[self.current_num]
self.current_num += 1
return ret
else:
raise StopIteration
classmate = Classmate()
classmate.add("老王")
classmate.add("老赵")
classmate.add("老章")
#for name in classmate:
# print(names)
#print("判断是否为迭代对象",isinstance(classmate,Iterable))
#用iter方法调用实例化后的对象
classmate_iterator = iter(classmate)
#print("判断是否为迭代器",isinstance(classmate_iterator,Iterator))
#print(next(classmator_iterator))
for name in classmate:
print(name)
迭代器的应用
不用迭代器的实现方法
nums = list()
a = 0
b = 1
i = 0
while i < 10:
nums.append(a)
a,b = b,a+b
for num in nums:
print(num)
用迭代器实现方法
from collections import Iterable
class Fibonacci(object):
def __init__(self):
self.names = list()
self.current_num = 0
def add(self,name):
self.names.append(name)
def __iter__(self):
"""此方法能把实例化的对象变成一个可迭代对象"""
return self
def __next__(self):
if self.current_num < len(self.names):
ret = self.names[self.current_num]
self.current_num += 1
return ret
else:
raise StopIteration
fibo = Fibonacci()
Fibonacci.add("老张")
Fibonacci.add("老刘")
Fibonacci.add("老王")
for num in fibo:
print(name)