python--------迭代器,生成器,字节串

一.迭代器

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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值