什么是迭代器
迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的一个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前不会后退。
类里既有iter方法和next方法就是迭代器。
列表 元组 集合 字典 字符串可以直接用for
int类型无法迭代,无法for循环
float也不行
如何判断一个东西能不能迭代
from collections import Iterable
判断是否是Iterable的子类,是就可以迭代
不是就无法迭代
加了iter方法的对象能否迭代?
用isintance方法来测试
- 结论:
普通类无法迭代
类中添加iter方法才可以迭代
写一个迭代器
1.判断xxxx_obj是否是可以迭代
2.在第1步成立的前提下,调用iter函数得到xxxx_obj对象的__next__方法的返回值
3.在得到了__iter__方法的返回值是一个迭代器
完成以上2,3点就是迭代器
导入模块
import time
from collections import Iterable
from collections import Iterator
创建两个对象,ClassIterator是迭代器
class Classmate(object):
def __init__(self):
self.names = list()
def add(self, name):
self.names.append(name)
def __iter__(self):
return ClassIterator()
class ClassIterator(object):
def __iter__(self):
pass
def __next__(self):
return 11
def iter()内必须返回对象的引用
return xxxx
总代码:
import time
from collections import Iterable
from collections import Iterator
class Classmate(object):
def __init__(self):
self.names = list()
def add(self, name):
self.names.append(name)
def __iter__(self):
return ClassIterator()
class ClassIterator(object):
def __iter__(self):
pass
def __next__(self):
return 11
classmate = Classmate()
classmate.add("老王")
classmate.add("张三")
classmate.add("李四")
print ("判断classmate是否是可以迭代的对象:",isinstance(classmate,Iterable))
for name in classmate:
print (name)
time.sleep(1)