迭代器

迭代:更新换代的过程,每次的迭代都必须基于上一次的结果

迭代器:迭代取值的工具

作用

迭代器提供了一种不依赖于索引取值的方式

根据以上对于迭代的描述,如果只是简单的重复,不算迭代,如下:

n = 0
while True:
print(n)
# 这只是简单重复,不算迭代

所以,迭代应该是“重复+每次迭代都是基于上一次的结果”

l = [1,2,3,4]
s = 'hello'
n = 0
while n < len(s):
print(s[n])
n += 1

可迭代对象

内置有__iter__()方法的都叫做可迭代对象

  # 对于这种 双下划线开头 双下划线结尾的方法

  # 我们读作“双下+方法名”

基本数据类型中,是可迭代对象的有:字符串(str)、列表(list)、元组(tuple)、字典(dict)、集合(set)

  另外 文件对象(file) 是可迭代对象,也是迭代器对象

str0 = 'bitten'
str0.__iter__()
print(type(str0)) # 字符串 list0=[1,2,3,]
list0.__iter__()
print(type(list0)) # 列表 tuple0 = (1,2,3)
tuple0.__iter__()
print(type(tuple0)) # 元组 dict0={'name':'bitten'}
dict0.__iter__()
print(type(dict0)) # 字典 set0={1,2,354,}
set0.__iter__()
print(type(set0)) # 集合
f1 = open('xxx.txt','w',encoding='utf-8')
res = f1.__iter__().__iter__().__iter__().__iter__()
print(f1 is res) # True
# 文件对象(执行内置的__iter__之后还是本身 没有任何变化):文件对象本身就是迭代器对象

迭代器对象

  可迭代对象执行内置的__iter__方法得到的就是该对象的迭代器对象

  迭代器对象需要满足的条件:

  1.内置有__iter__方法
  2.内置有__next__方法
  

    ps:迭代器一定是可迭代对象  
    而可迭代对象不一定是迭代器对象

  

  迭代器对象取值方法:

  必须调用__next__()方法

l = [1,2,3,4]
# 生成一个迭代器对象
iter_l = l.__iter__() # 迭代器取值 调用__next__
print(iter_l.__next__()) #
print(iter_l.__next__()) #
print(iter_l.__next__()) #
print(iter_l.__next__()) #
print(iter_l.__next__()) # 如果取完了 直接报错StopIteration
异常处理

#把上面这五行print改成下面的形式

# while True:
# try:
# print(iter_l.__next__())
# except StopIteration:
# # print('值已近取完啦')
# break

  迭代器对象无论执行多少次__iter__()方法得到的还是迭代器对象本身

  ps:文件对象作为迭代器对象,还内置了__iter__()

    因为for循环后面in(如果迭代器对象没有__iter__)

    是因为只有使用了__iter__()方法才能继续用__next__()取值

  迭代器取值的特点
  1. 只能往后依次取 不能返回取前面的值

for循环的本质

d = {'name':'bitten','password':'','hobby':'hiking'}
for i in d:
print(i)
# for循环后面的in关键 跟的是一个可迭代对象

  for循环内部的本质
    1.将in后面的对象调用__iter__转换成可迭代对象

        上面

7.15 迭代器 for循环的本质 生成器的更多相关文章

  1. Python中的可迭代对象/迭代器/For循环工作机制/生成器

    本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...

  2. Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象

    一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...

  3. python迭代器、装饰器和生成器

    装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 3.实 ...

  4. python 学习笔记3(循环方式;list初始化;循环对象/生成器/表推导;函数对象;异常处理)

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 16. 循环方式笔记: 1)range(0, 8, 2)   #(上限,下限,步长)  可以实现对元素或者下标的 ...

  5. python3 迭代器(Iterator)和生成器(generator)

    一.迭代器定义: 迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象: 集合数据类型如list.dict.str等是Iterable但不是Iterator,不过可以通过iter()函数获 ...

  6. python学习10—迭代器、三元表达式与生成器

    python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...

  7. Foreach能够循环的本质

    我们对foreach循环并不陌生,在C#中我们用得非常多,但是我们是否清楚foreach循环的本质呢? 众所周知,foreach循环能够遍历 数组  ,集合 .但是我们自己定义的一个类是否能够通过fo ...

  8. day13_7.15 迭代器和生成器

    1.迭代器 迭代就是一个更新换代的过程,每次迭代都必须基于上一次的结果. 迭代器就是迭代取值的工具.举个例子: while True: print('循环输出') 此代码会无限循环输出文字,是个死循环 ...

  9. Day 13 可迭代对象,迭代器对象,for循环迭代,生成器对象,枚举对象

    一.迭代器概念:# 器:包含了多个值的容器# 迭代:循环反馈(一次从容器中取出一个值)# 迭代器:从装有多个值的容器中一次取出一个值给外界# ls = 'abcdef'ls = [1, 2, 3, 4 ...

随机推荐

  1. Nginx+Tomat8负载后,利用Redis实现Tomcat8的session共享

    网上相应的文章应该都介绍,这里只特别记录下笔者在实操的过程出现的问题.此文件只针对tomcat 8 版本,之前版本可略过. tomcat 8 中的context.xml文件修改,增加以下配置. Jav ...

  2. Windows下必备的开发神器之Cmder使用说明

    诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...

  3. 剖析Unreal Engine超真实人类的渲染技术Part 3 - 毛发渲染及其它

    目录 四.毛发渲染 4.1 毛发的构造及渲染技术 4.1.1 毛发的构造 4.1.2 Marschner毛发渲染模型 4.1.3 毛发的间接光照 4.2 毛发的底层实现 4.3 毛发的材质解析 4.3 ...

  4. 【HDU - 3533】Escape(bfs)

    Escape  Descriptions: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y问这个人能不能安全到 ...

  5. nginx连接资源管理

    本文介绍在nginx中连接资源(即ngx_connection_t)的管理与使用. 连接池的初始化 在ngx_cycle_t结构体中维护了几个和连接相关的数据,具体如下 struct ngx_cycl ...

  6. 洛谷P1640 [SCOI2010]连续攻击游戏 题解

    题目链接: https://www.luogu.org/problemnew/show/P1640 分析: 这道题用二分图来解决即可.应该可以作为网络流中的模板题来食用, 每一个武器有两个属性,但是只 ...

  7. 百度AI之百度图像识别java版本使用

    百度AI之百度图像识别java版本使用\ 官网 http://ai.baidu.com/ 创建应用 查看 appid,appkey,sk 下载sdk https://ai.baidu.com/sdk# ...

  8. 给hexo博客的NEXT主题添加一个云日历

    一点废话 hexo中有文件的归档,但是博文的数目多了,浏览的时候也是很不方便的.于是我就有找个云日历的想法了,折腾了几天,网上的方法都试过了.但是没出效果.于是想着自己来写一个.这自己写的这部分是基于 ...

  9. 分享一个 Linux 环境下,强力的Python 小工具

    场景 Linux 用户,经常需要在终端查看一些数据,从文件里看 或者网络协议获取数据并查看. 比如,查看文件里的json数据:比如,查看etcd里存下的数据. 如果直接看cat 或者 curl 得到的 ...

  10. asn1 学习笔记

    语法 定义 Name ::= type 定义一个名称为“Name”的元素 它是一个给定ASN.1类型“Type”的实例 MyName ::= IA5String //IA5String(类似于ASCI ...