最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【独家焦点】关于可迭代对象、迭代器对象、生成器对象

来源:博客园


(资料图片仅供参考)

目录
  • 关于可迭代对象、迭代器对象、生成器对象
    • 一、可迭代对象
    • 二、迭代器对象
    • 二、生成器对象

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

一、可迭代对象

"可迭代对象"的定义及含义对象内置有__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 可以返回返回值

关键词: 注意事项