关于可迭代对象迭代器对象生成器对象
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 可以返回返回值
以上是关于关于可迭代对象迭代器对象生成器对象的主要内容,如果未能解决你的问题,请参考以下文章