7.15 迭代器 for循环的本质 生成器
迭代器
迭代:更新换代的过程,每次的迭代都必须基于上一次的结果
迭代器:迭代取值的工具
作用
迭代器提供了一种不依赖于索引取值的方式
根据以上对于迭代的描述,如果只是简单的重复,不算迭代,如下:
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循环的本质 生成器的更多相关文章
- Python中的可迭代对象/迭代器/For循环工作机制/生成器
本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...
- Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象
一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...
- python迭代器、装饰器和生成器
装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 3.实 ...
- python 学习笔记3(循环方式;list初始化;循环对象/生成器/表推导;函数对象;异常处理)
### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 16. 循环方式笔记: 1)range(0, 8, 2) #(上限,下限,步长) 可以实现对元素或者下标的 ...
- python3 迭代器(Iterator)和生成器(generator)
一.迭代器定义: 迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象: 集合数据类型如list.dict.str等是Iterable但不是Iterator,不过可以通过iter()函数获 ...
- python学习10—迭代器、三元表达式与生成器
python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...
- Foreach能够循环的本质
我们对foreach循环并不陌生,在C#中我们用得非常多,但是我们是否清楚foreach循环的本质呢? 众所周知,foreach循环能够遍历 数组 ,集合 .但是我们自己定义的一个类是否能够通过fo ...
- day13_7.15 迭代器和生成器
1.迭代器 迭代就是一个更新换代的过程,每次迭代都必须基于上一次的结果. 迭代器就是迭代取值的工具.举个例子: while True: print('循环输出') 此代码会无限循环输出文字,是个死循环 ...
- Day 13 可迭代对象,迭代器对象,for循环迭代,生成器对象,枚举对象
一.迭代器概念:# 器:包含了多个值的容器# 迭代:循环反馈(一次从容器中取出一个值)# 迭代器:从装有多个值的容器中一次取出一个值给外界# ls = 'abcdef'ls = [1, 2, 3, 4 ...
随机推荐
- JQuery学习笔记(3)——节点操作 节点查找
插入节点 内部插入 所谓的内部插入,就是指在节点里面的插入,而外部插入,则是在节点外面插入. append() prepend() appendTo() prependTo() append和prep ...
- 从似然函数到EM算法(附代码实现)
1. 什么是EM算法 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型 ...
- 全栈工程师知识点汇总——html5(上)
一.HTML5 1.新特性: 1. 取消了过时的显示效果标记 <font></font> 和 <center></center> ... 2. 新表单元 ...
- OWASP 关于会话管理 - 译文 [原创]
英文原文:https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Session_Management_Cheat_Shee ...
- e校帮V1.1使用指南
2017年04月17日,e校帮正式版本V1.1.4正式上线了.大家可以在e校帮官网进行下载,http://exiaobang.top 或者在搜狗手机助手/搜狗输入法/酷安进行下载. e校帮简介: e校 ...
- C4.5和ID3的差别
C4.5和ID3的差别 决策树分为两大类:分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用算法有ID3.C4.5.CART等. 信息熵 信息量: 信息熵: 信息增益 当计算出各个特征属 ...
- 基于Ajax的前后端分离
这种开发模式可以称为SPA (Single Page Application 单页面应用)时代. 这种模式下,前后端的分工非常清晰,前后端的关键协作点是 Ajax 接口.看起来是如此美妙,但回过头来看 ...
- PHP对接口执行效率慢的优化
PHP对接口执行效率慢的优化 PHP对接口执行效率慢的优化 造成执行效率低的原因可以由很多方面找原因 从代码层面,代码质量低,执行效率也会有很大影响的. 从硬件方面,服务器配置低,服务器配置是基础,这 ...
- Spring IoC源码探索(一)
一.探索前:谈谈我对IoC容器的了解 IoC容器主要用于管理Bean的生命周期和对象间的关系,通过依赖注入(DI)对容器中的Bean所需要依赖的其他对象进行注入.而这一切都是在Ioc容器里边进行的,假 ...
- 浏览器如何加载和解析CSS——CSS样式来源与层叠规则
关于CSS样式首先得理解浏览器如何加载它们,最终的页面样式是如何呈现的? CSS层叠样式表的关键在于"层叠",会根据选择符的使用而将样式相互叠加或者覆盖. CSS样式表之所有有&q ...