一.迭代器
1.定义:迭代器是访问可迭代对象的一种方式,用迭代器可以访问可迭代对象,迭代器是指可迭代对象返回的对象,迭代器可以用next(it)函数获取可迭代对象的数据
说明:迭代器只能往前取值,不会后退
2.迭代器函数:
1.iter():从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象
next(iterator)从迭代器中获取下一个记录,如果无法获取下一条记录,则会触发StopIteration异常
L=[1,2,3,4]
it=iter(L)
next(it)#获取L第一个元素
next(it)#获取L第二个元素
L=[1,2,4,5]
it=iter(L)
while True:
try:
x=next(it)
print(x)
except StopIteration:
print("已经打印完成")
break
3.迭代工具函数:作用是生成一个个性化的可迭代对象
(1)zip(iter1,iter2,iter3,…)
返回一个zip对象。此对象用于生成一个元组,此元组的个数是由元素最少的可迭代对象决定,元组内容是不同可迭代对象中元素的组合
如:
names=['Lily','Moke','Imy']
ages=[12,22,32]
for t in zip(names,ages):
print(t)#打包成元组返回
#结果是
#('Lily', 12)
#('Moke', 22)
#('Imy', 32)
(2)enumerate:自动生成索引
enumerate(iter,n) #索引从n开始,如果不设置,默认从0开始
names=['Lily','Moke','Imy']
for t in enumerate(names):
print(t)#打包成元组返回
#返回结果
#(0, 'Lily')
#(1, 'Moke')
#(2, 'Imy')
二.生成器(generator)
1.定义:生成器是可以动态提供数据的对象,生成器对象也是可迭代对象
2.分类:(1)生成器函数:含有yield语句的函数是生成器函数,函数调用后返回一个生成器对象(2)生成器表达式
(1)生成器函数说明:
yield 语句:yield 只用于def函数中,摸底时将此函数作为生成器函数使用,yield用来生成数据,供next(it)函数使用
def myyield():
yield 2
yield 3
yield 4
gen= myyield()#是一个可迭代对象
print(gen)#得到结果<generator object myyield at 0x00000189778A4408>
it=iter(gen)#创建一个迭代器
next(it)#先由myyield()生成2,返回2,myyield()函数会停到 语句yield 2的位置
next(it)#创建3,返回3
#每调用一次next(it),myyield()函数的语句往下走一步,生成一个对象,当超出yield()对象的数量时,会引发错误
#这种做法对于大量数据而言可以节约空间
(2)生成器表达式说明:
语法:
(表达式 for 变量 in 可迭代对象[if 真值表达式])[if]部分可以省略
如:
a=list(x**2 for x in range(2,5))
print(a)
三.字节串(bytes)(字节序列)
1.作用:存储以字节为单位的数据
2.说明:字节串是不可改变序列,字节是0~255之间的整数
3.创建:字节串必需由字节组成
#创建空的字节串
B=b''
B=b""
B=b''''''
B=b""""""
#创建非空的字节串
#字节串中不能是中文
B=b"hello"
B=b"abd\n123"
4.字节串的构造函数 bytes
bytes()#生成空的字节串
bytes(整数可迭代对象)#从可迭代对象中生成一个字节串
bytes(n)#生成n个值为0的字节串
bytes(字符串,encoding='utf-8')#用字符串的转换编码生成一个字节串
5.bytes的运算
所有序列的运算规则都适用
如:
# + += * *=
# < <= > >= == !=
# in/ not in
# 索引和切片
# len,max,min,all,any等函数
6.bytes与str的区别
1.bytes:存储字节(0~255)
str:存储字符(Unicode)
2.两者的转换:
编码:str-----> bytes
b=s.encode(encoding=‘utf-8’)
解码:bytes----->str
s=b.decode(encoding=‘utf-8’)
四.字节数组(bytearray):可变的字节串
1.创建函数
bytearray() #
bytearray(整数可迭代对象)#从可迭代对象中生成一个字节数组
bytearray(n)#生成n个值为0的字节数组
bytearray(字符串,encoding='utf-8')#用字符串的转换编码生成一个字节数组
2.赋值操作
同列表一样
如:
B=bytearray(b'abcde')
B[0::2]=bytearray(b'ACE')
print(B)
#得到结果为 bytearray(b'AbCdE')
3.bytearray的方法
bytearray.clear()
bytearray.append(n)#追加一个字节
bytearray.remove(value)#删除第一个出现的字节,如果没有出现,会触发ValueError
bytearray.reverse()
bytearray.decode(encoding='utf-8')#转换成字符串
bytearray.find(sub,[start,end])