python 当中迭代器与迭代对象
""" python当中迭代器与迭代对象
可迭代对象和迭代器的区别:
1.实现的协议不同
1.1可迭代对象使用的__iter__方法
1.2迭代器使用的是__next__ 和 __iter__ 方法
2.迭代器可以支持next方法进行迭代取值操作,可迭代对象不行
Iterable:可迭代对象
能够使用for循环遍历的对象都叫做可迭代对象
所有的序列类型: list str tuple range
非序列类型:dict set 文件对象 f = open(file)
Iterator:迭代器
Generator:生成器
"""
class IClass():
pass
# a1 = IClass()
# for i in a1:
# print(i)
"""TypeError: 'IClass' object is not iterable 不是一个可迭代对象"""
class IClass1():
# 可迭代协议
# iter 返回的必须是一个迭代器
def __iter__(self):
return iter([1, 2, 3, 4, 5])
# b1 = IClass1()
# for i in b1:
# print(i)
# print(b1[1])
""" 可以进行for 循环遍历
但是不支持索引:TypeError: 'IClass1' object is not subscriptable
他不是一个序列类型所以不支持进行索引取值
"""
class IClass2():
values = [1, 2, 3, 4, 5]
# 顶一个一个序列语句
def __getitem__(self, item):
return self.values[item]
# 序列语句可以进行索引取值也可以通过for 循环进行遍历
#
# c1 = IClass2()
# print(c1[1])
#
# for i in c1:
# print(i)
# str() 通过查看源码可以看到当前的语句是否是一个 序列语句和是否可迭代
# list()
# tuple()
""" iter可以将数据转换为迭代器 next方法:
我们使用索引取值的时候可以无限去取序列当中的数据,
但是使用迭代器,里面的数据取一次则少一个数据,值是根据
序列的长度进行迭代的次数的.
"""
list1 = [1, ]
res = iter(list1)
a1 = next(res)
# a2 = next(res)# StopIteration 数据被取尽的时候迭代器停止
# print(a1)
# __next__ __iter__ 组成迭代器
# 迭代操作
# for 循环:称迭代循环(循环对每一个对象进行迭代操作)
# 内置函数next 可以对迭代器进行迭代操作

浙公网安备 33010602011771号