可迭代对象
遍历也叫迭代。
使用isinstance()
检测对象是否可迭代。返回True表示可迭代,False表示不可迭代。
格式:
from collections.abc import Iterable
isinstance(检测对象,Iterable)
注意:Python3.6版本以后导入Iterable需要从collections.abc中导入,不然会报错。
迭代器
可迭代对象通_ _iter_ _
方法向我们提供一个迭代器,我们在迭代一个对象的时候,实际上就是先获取该对象的一个迭代器,然后通过迭代器依次获取对象中的每一个数据。
iter()函数与next()函数
-
获取迭代器:
iter(可迭代对象)
-
获取可迭代对象的值:
next(迭代器)
-
迭代器特点:
- 记录遍历的位置
- 提供下一个元素的值
-
for循环本质:
- 通过iter(可迭代对象)获取遍历对象的迭代器
- 通过next()获取下一个元素
- 捕获异常StopIteration
-
自定义迭代器类
- 必须含有
__iter__()
- 必须含有
__next__()
- 必须含有
"""
1. 一个可迭代对象提供一个迭代器
2. 可迭代对象-->iter(可迭代对象)-->next(迭代器)
"""
data_list = [1, 2, 3, 4, 65, 8, 9]
# 获取迭代器
l1_iter = iter(data_list)
# 根据迭代器获取下一个值
value = next(l1_iter)
print(value)
value = next(l1_iter)
print(value)
value = next(l1_iter)
print(value)
# 自定义迭代器类
# 1.必须含有__iter__()
# 2.必须含有__next__()
class MyIterator(object):
def __iter__(self):
pass
def __next__(self):
pass
迭代器应用:自定义列表
- 自定义Mylist类:
- 初始化方法
__iter__()
方法,对外提供迭代器addItem()
方法添加数据
- 自定义迭代器:
- 初始化方法
- 迭代器方法
- 获取下一个元素值方法
"""
1. Mylist类
初始化方法
__iter__()方法,对外提供迭代器
addItem()方法添加数据
"""
class MyList(object):
def __init__(self):
# 定义实例属性,保存数据
self.items = []
def __iter__(self):
# 创建MyListIterator对象
mylist_iterator = MyListIterator(self.items)
return mylist_iterator
def additem(self, data):
self.items.append(data)
# print(self.items)
#2. 自定义迭代器
class MyListIterator(object):
# 初始化方法
def __init__(self, items):
# 定义实例属性,保存传递过来的数据
self.items = items
# 记录迭代器迭代器的位置
self.index = 0
# 迭代器方法
def __iter__(self):
pass
# 获取下一个元素值方法
def __next__(self):
# 判断当前下标是否越界
if self