关于可迭代对象迭代器对象生成器对象

Posted almira998

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于可迭代对象迭代器对象生成器对象相关的知识,希望对你有一定的参考价值。

关于可迭代对象、迭代器对象、生成器对象

一、可迭代对象

\'可迭代对象\'的定义及含义
对象内置有__iter__方法的都称为可迭代对象
可迭代在python中可以理解为是否支持for循环
\'可迭代对象\'的范围
不是可迭代对象	int float bool 函数对象
是可迭代对象 str list dict tuple set 文件对象
\'索引取值\'与\'迭代取值\'的差异

l1 = [11, 22, 33, 44, 55]
\'索引取值\'
可以任意位置任意次数取值
不支持无序类型的数据取值
\'迭代取值\'
只能从前往后依次取值无法后退
支持所有类型的数据取值(无序有序)

二、迭代器对象

\'迭代器对象\'的定义
是由可迭代对象.__iter__方法产生的
迭代器对象判断的本质是看是否内置有__iter__和__next__
\'迭代器对象\'的作用
提供了一种不依赖于索引取值的方式
正因为有迭代器的存在 我们的字典 集合才能够被for循环
\'迭代器对象\'相关实操
s1 = \'hello\'  # 可迭代对象
res = s1.__iter__()  # 迭代器对象
print(res.__next__())  # 迭代取值 for循环的本质
一旦__next__取不到值 会直接报错
# 关于迭代器对象的注意事项
可迭代对象调用__iter__会成为迭代器对象
迭代器对象如果还调用__iter__不会有任何变化 还是迭代器对象本身
\'for循环的本质\'
for 变量名 in 可迭代对象:
    循环体代码
# 关于for循环的本质注意事项
先将in后面的数据调用__iter__转变成迭代器对象
依次让迭代器对象调用__next__取值
一旦__next__取不到值报错 for循环会自动捕获并处理

二、生成器对象

\'生成器对象\'的本质
还是内置有__iter__和__next__的迭代器对象
\'迭代器对象\' 与 \'生成器对象\' 的区别

\'迭代器对象\'是解释器自动提供的
\'生成器对象\'是程序员编写出来的
创建生成器的基本语法
函数体代码中填写"yield"关键字
def my_iter():
    print(\'我可以产生生成器对象\')
    yield
# 关于yield的注意事项
·函数体代码中如果有yield关键字 那么函数名加括号并不会执行函数体代码 会生成一个生成器对象(迭代器对象)
·使用加括号之后的结果调用__next__才会执行函数体代码
·每次执行完__next__代码都会停在yield位置 下次基于该位置继续往下找第二个yield
·yield还有点类似于return 可以返回返回值

以上是关于关于可迭代对象迭代器对象生成器对象的主要内容,如果未能解决你的问题,请参考以下文章

可迭代对象迭代器生成器的理解

代码详解生成器迭代器

python学习--如何实现可迭代对象(itearable)和迭代器(iterator)

迭代器/可迭代对象/生成器

可迭代对象,迭代器(对象),生成器(对象)

可迭代对象迭代器生成器的区别