Python——第四章:迭代器(Iterators)
迭代器iterator:
提到迭代器,最典型的就是for循环
for 变量 in 可迭代:
pass
可迭代对象iterable:
是指可以使用 for 循环进行遍历的对象。除了字符串 (str)、列表 (list)、元组 (tuple)、字典 (dict)、集合 (set) 和文件对象 (open()) 之外,还有其他一些常见的可迭代对象,例如生成器对象、range 对象等。
通常,容器类型的对象都是可迭代的(如字符串、列表、元组、字典、集合等),不是容器类型的对象都不是可迭代的。
it = iter("你好啊朋友")
print(it)
#运行结果:
<str_iterator object at 0x000001A9B79F9390>
不可迭代的对象not iterable:
通常是指那些不支持使用 for 循环进行遍历的对象(不是容器类型的对象)。例如:
- 整数 (int) 和浮点数 (float): 直接的数字类型是不可迭代的。
for c in 123456:
print(c) #运行结果
Traceback (most recent call last):
File "D:\装饰器.py", line 1, in <module>
for c in 123456:
TypeError: 'int' object is not iterableiterable: 可迭代的 - 布尔值 (bool): 布尔值也是不可迭代的。
# 不可迭代的例子
bool_value = True
for b in bool_value:
print(b) - NoneType (None):
None也不可迭代。# 不可迭代的例子
none_value = None
for n in none_value:
print(n)
迭代器(Iterator)的概念
它允许你按需逐个访问集合中的元素,而不需要提前获取整个集合。迭代器协议是指实现了 __iter__() 和 __next__() 方法的对象,其中 __iter__() 返回迭代器对象本身,而 __next__() 返回集合中的下一个元素。
获取迭代器的两种方案:
1. iter() 内置函数可以直接拿到迭代器
2. __iter__() 特殊方法
从迭代器中拿到数据:
1. next() 内置函数
2. __next__() 特殊方法
it = iter("你好啊") # 或者 it = "你好啊".__iter__()
print(1,it.__next__())
print(2,next(it))
print(3,it.__next__())
#运行结果
1 你
2 好
3 啊
for里面一定是要拿迭代器的. 所以所有不可迭代的东西不能用for循环for循环里面一定有__next__出现
模拟for循环工作原理:
s = "我是数据"
it = s.__iter__() # 拿到迭代器
while 1:
try:
data = it.__next__()
print(data) # for循环的循环体
except StopIteration:
break
print(123456)
总结: 迭代器统一了不同数据类型的遍历工作
迭代器本身的特性:
- 只能向前不能向后,也不能反复
- 迭代器是一次性的,全部执行过后变成
StopIteration,再次使用需要再次iter() - 特别节省内存(可以用很少的内存,去循环遍历很庞大数据体)
- 惰性机制(迭代器一旦创建出来,不主动去访问__next__,就不会自动向前遍历。什么时候调用一次,指针才会挪动一次。)(类似于医院的叫号机制)
it = iter("你好啊") # 或者 it = "你好啊".__iter__()
print(1,it.__next__())
print(2,next(it))
print(3,it.__next__())
print(4,next(it)) # StopIteration: 迭代已经停止了. 不可以再次从迭代器中继续拿数据了
print(5,it.__next__())
#运行结果
Traceback (most recent call last):
File "D:\生成器.py", line 6, in <module>
print(4,next(it)) # StopIteration: 迭代已经停止了. 不可以再次从迭代器中拿数据了
^^^^^^^^
StopIteration
1 你
2 好
3 啊
迭代器本身也是可迭代的:
s = "你好啊, 我叫赛利亚"
it = s.__iter__() #拿字符串s的迭代器
for mm in it:
print(mm)
循环就是迭代的代表,循环it就能证明迭代器本身it可以被迭代
Python——第四章:迭代器(Iterators)的更多相关文章
- 简学Python第四章__装饰器、迭代器、列表生成式
Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群 群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...
- Python第四章-字典
第四章 字典-当索引不好用时 4.0 字典可以理解成是C++里的map,可以映射任何类型.字典这种结构类型称为映射(mapping). 字典是Python中唯一内建的映射类型,字典中的值并 ...
- 【笔记】Python基础四:迭代器和生成器
一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...
- Python第四章实验报告
一.实验项目名称:<零基础学Python>第四章的14道实例和4道实战 二.实验环境:IDLE(Python 3.9 64-bit) 三.实验目的和要求:熟练掌握Python序列的应用 四 ...
- 《Python 学习手册4th》 第十四章 迭代器和解析
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- 流畅的python第四章文本和字节序列学习记录
字符问题 把码位转化成字节序列的过程是编码,把字节序列转化成码位的过程是解码 把unicode字符串当成人类可读的文本,码位当成机器可读的, 将字节序列编程人类可读是解码,把字符串编码成字节序列是编码 ...
- python3-cookbook笔记:第四章 迭代器与生成器
python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...
- Python第四章(北理国家精品课 嵩天等)
一.程序的分支结构 二.身体质量指数BMI #CalBIv1.py height,weight = eval((input("请输入身高(米)和体重\(公斤)[逗号隔开]:"))) ...
- python第四章:函数--小白博客
Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
- Python第四章-流程控制
流程控制 在以前的代码中,所有的代码都是交由 Python 忠实地从头执行到结束.但是这些远远不够.很多时候需要根据不同的情况执行不同的代码. 如果你想改变这一工作流程,应该怎么做? 就像这样的情况: ...
随机推荐
- 【逆向专题】【危!!!刑】(一)使用c#+Win32Api实现进程注入到wechat
引言 自从上篇使用Flaui实现微信自动化之后,这段时间便一直在瞎研究微信这方面,目前破解了Window微信的本地的Sqlite数据库,使用Openssl,以及Win32Api来获取解密密钥,今天作为 ...
- 「joisc2016 - D3T2」回転寿司
题意大概是这样,「每次操作选出区间中的一个 LIS(strictly),满足其开端是极靠近左端点且大于 \(A\) 的位置,答案即这个 LIS 的末尾,做一个轮换后弹出序列末端」. 首先做几个观察. ...
- STL容器:map
map 可以当作特殊的数组来使用,在数组开不下,或者数组下标不是整数的时候使用 map 就很方便,比如统计字符串的出现个数,统计 int 范围内的数的出现次数等等. 映射是指两个集合之间的元素的相互对 ...
- Fisher线性判别分析(二分类)
LDA(Linear Discriminant Analysis)是一种经典的线性判别方法,又称Fisher判别 分析.该方法思想比较简单:给定训练集样例,设法将样例投影到一维的直线 上,使得同类样例 ...
- Python网络编程——基于tcp协议实现远程执行命令、udp协议没有粘包问题、解决粘包问题、socketserver模块的基本使用(基于tcp协议、基于udp协议的使用)
文章目录 基于tcp协议实现远程执行命令 udp协议没有粘包问题 解决粘包问题 解决粘包问题(终极版) socketserver模块的基本使用 基于tcp协议的使用 基于udp协议的使用 基于tcp协 ...
- 将python程序打包为exe可执行文件方法
将py打包为exe文件需要依赖pyinstaller第三方库 -F:打包后只生成单个exe格式文件: -D:默认选项,创建一个目录,包含exe文件以及大量依赖文件: -c:默认选项,使用控制台(就是类 ...
- 客制开发tiptop程序随记-pta表结构问题-误删表的恢复
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],-.); 删除字段的语法:alter ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-20-处理鼠标拖拽-下篇
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,其次有人私信宏哥说是有那种类 ...
- 轻巧的批量图片压缩工具imgfast
现在的手机拍照动辄2M3M,还有7M8m的,如果要把这些文件上传到网上应用,浪费网络,占用资源 所以2022年中秋写了这个小工具,可以批量进行图片文件压缩,支持jpg和png. 文件下载链接https ...
- kubernetes 概述
云原生的发展 云原生是一条最佳路径或者最佳实践.更详细的说,云原生为用户指定了一条低心智负担的.敏捷的.能够以可扩展.可复制的方式最大化地利用云的能力.发挥云的价值的最佳路径.因此,云原生其实是一套指 ...