目录
关于可迭代对象、迭代器对象、生成器对象
一、可迭代对象
'可迭代对象'的定义及含义
对象内置有__iter__方法的都称为可迭代对象
可迭代在python中可以理解为是否支持for循环
'可迭代对象'的范围
不是可迭代对象 int float bool 函数对象
是可迭代对象 str list dict tuple set 文件对象
二、迭代器对象
'迭代器对象'的定义
是由可迭代对象.__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 可以返回返回值
标签:__,迭代,对象,生成器,iter,next
From: https://www.cnblogs.com/almira998/p/17060456.html