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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
目录

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

一、可迭代对象

'可迭代对象'的定义及含义
对象内置有__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 可以返回返回值
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“关于可迭代对象、迭代器对象、生成器对象” 的相关文章