首页 > 其他分享 >关于可迭代对象、迭代器对象、生成器对象

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

时间:2023-01-18 19:45:06浏览次数:35  
标签:__ 迭代 对象 生成器 iter next

目录

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

一、可迭代对象

'可迭代对象'的定义及含义
对象内置有__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

相关文章

  • 【从0开始学JAVA】1. 类个,我的对象在哪里?
    【从0开始学JAVA】类个,我的对象在哪里?由于本人是从C开始学习的编程菜鸟,虽然接触过一点cpp(对现在的我来说也许只是c+stl库?只是为了写算法题方便一些...),所以我打算先学......
  • JS_10_document对象
    js中用来操作HTML文档的对象,通过操作document对象可以对正在运行的代码进行修改。 一、获取HTML标签对象直接获取:1、通过id获取:window(可省).document.getElementB......
  • 利用数组特性便利json对象中属性
    在使用ajax编程时,有时候服务器端返回的json的属性是不确定的,这样在客户端使用时,就没有办法使用json对象的属性名称来访问属性值。 我们可以将json对象看作是一个字典数组,具......
  • python 类与对象
    python类与对象(未完待续)类定义括号里的是继承类,如果没有类继承,就继承object类,它是所有类的基础类。pass是占位符,还可用在判断和循环中class类名(object):pa......
  • VS2019 C++ 调用python函数/类对象的方法
    1.环境配置VS工程配置要和python一致,安装的python如果是64位的,工程配置也要选成64位的在工程配置中添加包含目录和库目录,添加python环境目录里的include和libs文件......
  • 学习笔记——Spring中的AOP(AspectJ);Spring中AOP概述;Spring中AOP相关术语;AspectJ中切
    2023-01-18一、Spring中的AOP1、AspectJ(1)简介Java社区里最完整最流行的AOP框架在Spring2.0以上版本中,可以使用AspectJ注解或基于XML配置的AOP(2)使用AspectJ步骤①在s......
  • Scanner对象
    Scanner对象Scanner是Java5的新特性,导入包的路径为"java.util.Scanner"我们可以通过Scanner类来获取用户的输入Scanner基本语法创建一个Scanner对象Scanners=newS......
  • 5面向对象
    面向对象面向对象编程(oop)面向对象的本质是:以类的方式组织代码,以对象的组织(封装)数组抽象三大特性:封装、继承、多态先有类后又对象,类是对象的模板类和对象类是一种抽......
  • JS_9_window对象
    BOM浏览器对象模型:规范浏览器对js的支持,即js调用浏览器的功能。它的具体实现为windows对象 一、框体方法弹出一个框框,调用时候window可省略不写。警告框:会显示......
  • js两个对象赋值,只赋共同的值
    letobj1={a:1,b:2,c:3}letobj2={a:0,b:0,c:0}//两个对象的字段完全相同时采用下面两种方式obj2=Object.assign(obj1)......