判断一个数据类型是否是可以迭代的
- 判断一个数据类型是否可以迭代, 需要判断是否是
Iterable
的子类
from collections import Iterable
- 使用 isinstance 方法
- isinstance 判断一个对象是否是另一个对象创建出来的
isinstance([11, 22, 33], Iterable)
- 判断一个对象是否是一个迭代器, 需要判断是否是
Iterator
的子类
isinstance(classmate, Iterator)
自己创建一个类, 创建一个对象, 用for循环遍历这个对象
class Classmate():
def __init__(self):
self.classlist = []
def add(self, name):
self.classlist.append(name)
classmate = Classmate()
classmate.add('小1')
classmate.add('小2')
classmate.add('小3')
for name in classmate:
print(name)
- 报错 :
TypeError: 'Classmate' object is not iterable
- 普通的类是不可以迭代的
在类里面添加一个 __iter__
方法, 让对象成为一个可以迭代的对象
- 这个方法里面必须返回一个具有
__iter__
方法和__next__
方法对象的引用 - 调用
iter
函数可以得到classmate
对象的__iter__
方法的返回值 __iter__
方法的返回值是一个迭代器
class Classmate():
def __init__(self):
self.names = []
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("小1")
classmate.add('小2')
classmate.add('小3')
classmate_iterator = iter(classmate)
next(classmate_iterator )
- 使用
next()
方法会自动调用指定的对象里面的__next__
方法 - 打印
11
我们的目的是打印names里面的数据,那么在ClassIterator
类的__next__
方法里面, 怎么才能访问到Classmate
的列表