python_迭代器和生成器、字节串、字节数组
迭代器 iterator 和 生成器 generator
什么是迭代器:迭代器就是获取迭代对象中元素的工具,迭代器是由可迭代对象生成的
1、迭代器是指用iter(可迭代对象)函数返回的对象(实例)
2、迭代器可以用next(it)函数获取可迭代对象的数据
迭代器函数:
1、iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是一个能提供迭代器的可迭代对象,<list_iterator object at 0x0000027694817588>、 · <tuple_iterator object at 0x0000027694817630>、<range_iterator object at 0x00000276945E7CF0>...
2、next(iterator)从迭代器iterator中获取下一条记录,如果无法获取下一条记录,则触发StopIteration异常
说明:
1、迭代器是访问可迭代对象的一种方式
2、迭代器只能向前取值,不能后退
3、用iter函数可以返回一个可迭代对象的迭代器
4、可迭代对象 创建 迭代器,迭代器 访问 迭代器对象
迭代器的用途
迭代器对象能用next函数获取下一个元素
"""for语句其实就是iter函数,next函数与while语句的结合"""
L =[2,3,5,7]
for x in L:
print(x)
print("-----while语句---------")
it = iter(L)
while True:
try:
x = next(it)
print(x)
except StopIteration:
print("迭代终止,迭代器不能提供任何数据")
break
生成器 Generator (python 2.5之后才产生的)
什么是生成器:
生成器是指能够动态提供数据的对象,生成器对象也是可迭代对象(实例)<generator object myyield at 0x0000020BA953D0A0>
生成器有两种:
1、生成器函数
2、生成器表达式
生成器函数定义:
含有yield语句的函数是生成器函数,此函数被调用时将返回一个生成器对象
注:yield翻译为产生(或生成)
语法:yield 表达式
说明:1、yield用于def函数中,目的是将此函数作为生成器函数使用
2、yiled用来生成数据,供迭代器next(it)函数使用

生成器函数说明:
1、生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
2、在生成器函数调用return语句时会产生一个StopIteration异常来通知next(it)不能再提供数据
生成器表达式:
语法:(表达式 for 变量 in 可迭代对象 [if 真值表达式])[]里的内容可以省略
作用:用推导式的形式生成一个新的生成器
示例:
gen = (x**2 for x in range(1,4) )
print(next(gen))#
print(next(gen))#
print(next(gen))#
优点:不占用内存空间
列表推导式 和 生成器表达式的区别:
L = [1,2,3,4]
gen = (x for x in L)#gen绑定生成器
lst = [x for x in L]#lst绑定列表
L[1] = 222 #改变原来列表的第二个元素
for x in lst:
print(x,end="|")#1|2|3|4|
for x in gen:
print(x,end="|")#1|222|3|4|
迭代工具函数:
迭代工具函数的作用是生成一个个性化的可迭代对象
函数
1、zip(iter1[,iter2,iter3,...])返回一个zip对象,此对象用于生成一个元组,此元组的个数由最小的可迭代对象决定
示例
numbers = [10086,10000,10010,95588]
names = ["中国移动","中国电信","中国联通"]
for x in zip(numbers,names)
print(x) #(10086,"中国移动")(10000,"中国电信")(10010,"中国联通")
2、enumerate函数(枚举函数)
格式:enumerate(iterable[,start])
作用:生成带索引的枚举对象,返回迭代类型为索引-值对(index,value)对,默认索引从0开始,也可以使用start绑定
字节串 bytes 和 字节数组 bytearray
字节串 bytes(一字节等于八位,1byte = 8bit)
作用:存储以字节为单位的数据
说明:1、字节串是不可变的字节序列
2、字节是0~255之间的整数
创建空字节串的字面值:
b''
b""
b''''''
b""""""
B''
B""
B''''''
B""""""
创建非空字节串的字面值:(在上面表达式里面填写值)
b'ABC'
b"\x41" #b"a"
字节串的构造函数 bytes
bytes() 生成一个空的字节串 等同于 b' '
byes(整型(小于等于255)可迭代对象) 用可迭代对象初始化一个字节串
bytes(整数n) 生成n个值为0的字节串
bytes(字符串,encoding = 'utf-8') 用字符串的转换编码生成一个字节串
字节串的匀运算: + += * *= < <= > >= == !== in / not in 索引/切片
bytes 与 str 的区别:
bytes 储存字节(0-255)
str 储存Unicode字符(0-65535)
bytes 与 str 的转换
str ---------编码(encode)--------→bytes:b = s.encod("utf-8")
bytes -------解码(decode)-----→str :s = b.decode("utf-8")
字节数组 bytearray
可变的字节序列
创建字节数组的构造函数:
bytearray() 创建空的字节数组
bytearray(整数)
bytearray(整型可迭代对象)
bytearray(字符串,encoding=“utf-8”)
注:以上参数等同于字符串
字节数组的运算: + += * *=
比较运算:< <= > >= == !=
in / not in
索引、切片(字节数组支持索引和切片,规则用列表相同)
bytearray 的方法:
B.clear() 清空字节数组
B. append(n) 追加一个字节(n为0-255的整数)
B.remove(value) 删除第一次出现的字符,如果没有出现,则产生ValueError错误
B.reverse() 字节的顺序进行反转
B.decode(encoding=“utf8”) 解码
B.find(sub[,start[,end]]) 查找如果存在返回下标索引,如果不存在则返回-1
总结:
迭代器:用来访问可迭代对象的数据,iter(),next()
生成器函数:根据实际需要动态创建一些数据(数据原来不存在,用yield现用现生成)
生成器表达式:
字节串和字节数组
python_迭代器和生成器、字节串、字节数组的更多相关文章
- Python_迭代器和生成器的复习_38
迭代器和生成器 迭代器: 双下方法:很少直接调用的方法,一般情况下,是通过其他方法触发的 可迭代的协议——可迭代协议 含有__iter__ 的方法 ('__iter__' in dir(数据)) 可迭 ...
- Python_迭代器、生成器、列表推导式,生成器表达式
1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...
- python_迭代器和生成器
迭代器和生成器 1.迭代器 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比 ...
- Python_迭代器与生成器
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...
- [转]python常用的十进制、16进制、字符串、字节串之间的转换
阅读目录(Content) 整数之间的进制转换: 字符串转整数: 字节串转整数: 整数转字节串: 字符串转字节串: 字节串转字符串: 测试用的python源码 进行协议解析时,总是会遇到各种各样的数据 ...
- Python全栈工程师(迭代器、字节串)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 Python人工智能从入门到精通 迭代器 Iterator: 用<&g ...
- 【实验向】问题:假设计算机A和计算机B通信,计算机A给计算机B发送一串16个字节的二进制字节串,以数组形式表示:
问题: 假设计算机A和计算机B通信,计算机A给计算机B发送一串16个字节的二进制字节串,以数组形式表示: unsigned char[16] = {0x3f, 0xa0, 0x00, 0x00, 0x ...
- python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)
进行协议解析时.总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上.直接上样例 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 ...
- python常用的十进制、16进制、字符串、字节串之间的转换
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上,直接上例子 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 ...
随机推荐
- RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true
1.现象 很多网友会问,为什么明明集群中有多台Broker服务器,autoCreateTopicEnable设置为true,表示开启Topic自动创建,但新创建的Topic的路由信息只包含在其中一台B ...
- [考试反思]1011csp-s模拟测试69:无常
承蒙大脸skyh的毒奶,加之以被kx和Parisb以及板儿逼剥夺了一中午的睡眠(其实还有半个晚上)RP守恒终于失效了,连续两场没考好 RP也是不够了,竟然考原题,而且还不换题,连样例都一模一样只不过加 ...
- Linux修改主机名!(图文)
本篇作为之前的补充篇,如果想修改自己的主机名,方便老师检查作业是否是自己做的,可以用修改主机名的方法,那么怎么修改呢? 一. 使用hostname命令 比如我现在的主机名是haozhikuan-hbz ...
- 双十一还在盖楼?少年你应该掌握Docker 部署 Consul了
▶ Spring Boot 依赖与配置 Maven 依赖 <dependencyManagement> <dependencies> <dependency> &l ...
- Linux系统重启Oracle-12c步骤
Linux系统重启Oracle-12c步骤 1. 使用oracle用户登录: [root@Oracle-12c /]# su – oracle 2. 登录oracle登陆管理员账号: [oracle@ ...
- RocketMQ消息轨迹-设计篇
目录 1.消息轨迹数据格式 2.记录消息轨迹 3.如何存储消息轨迹数据 @(本节目录) RocketMQ消息轨迹主要包含两篇文章:设计篇与源码分析篇,本节将详细介绍RocketMQ消息轨迹-设计相关. ...
- Matlab 文件格式化/Matlab Source File Formator
由于需要使用到别人编写的Matlab代码文件,但是呢不同的人有不同的风格,有的写得就比较糟糕了. 为了更好地理解代码的内容,一个比较美观的代码会让人身心愉悦. 但是在网上并没有找到一个比较好的实现,此 ...
- 在 ASP.NET Core 项目中使用 MediatR 实现中介者模式
一.前言 最近有在看 DDD 的相关资料以及微软的 eShopOnContainers 这个项目中基于 DDD 的架构设计,在 Ordering 这个示例服务中,可以看到各层之间的代码调用与我们之前 ...
- suseoj 1211: 子集和问题 (dfs)
1211: 子集和问题 时间限制: 1 Sec 内存限制: 128 MB提交: 2 解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 子集和问题的一个实例为<S ...
- hdu 1874 畅通工程续 (floyd)
畅通工程续Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...