码迷,mamicode.com
首页 > 其他好文 > 详细

内置函数:bytes、bytearray、memoryview

时间:2019-08-25 11:46:26      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:数组   关键字   本质   view   解码   你好   存在   类型   通过   

bytes:字节组成的有序不可变序列
bytearray:在phthon3当中新增的bytearray为字节组成的可变序列,修改字节不会生成新的序列
字符串以字符为单位,转换成bytes类型以字节为单位,两者并无区别,本质都是编译成计算机可以读懂的01010101字节码
两者参数一样:
  • 如果 source 为整数,则返回一个长度为 source 的初始化数组;
  • 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
  • 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
  • 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray。
  • 如果没有输入任何参数,默认就是初始化数组为0个元素。
创建:
name = bytes(aike,encoding=utf-8) #通过关键字创建
name1 = baike #直接指定字符串为bytes类型
print(name)
print(name1)
print(b‘‘)#参数为空,初始化数组为0个元素。
print(bytes([1,2,3,485]))#报错 如果传入的参数为可迭代类型,必须为0-256之间的整数

a = [1,2,3,4,5,25]
print(bytearray(a))

a = [1,2,3,4,5,257]
print(bytearray(a))#报错 如果传入的参数为可迭代类型,必须为0-256之间的整数

print(bytearray(21))
print(bytearray(aike,encoding=utf-8))#转换成utf-8编码格式的bytearray类型
print(bytearray(艾克,encoding=utf-8))
print(bytearray())#参数为空,初始化数组为0个元素。

decode:
将bytes格式的字符串解码成字符串格式,是什么编码的bytes类型,就要用什么编码进行解码,否则会报错或者乱码,默认为utf-8。
s = bytes(艾克,encoding=gbk)
b = s.decode(gbk)
print(s)
print(b)

encode:
将字符串转换成指定编码的bytes类型,是什么编码的bytes类型,就要用什么编码进行解码,否则会报错或者乱码,默认为utf-8。
s1 = 艾克
s2 = s1.encode(gbk)
s3 = s2.decode(gbk)
print(s2,s3)

memoryview:
如果要用memoryview去引用一个object, 那么这个object必须支持buffer protocol,python中原生(built-in)支持buffer protocol的obj有bytes和bytearray。
所以使用它需要先把参数转换成bytes类型的字节码形式,一般的序列进行切片是直接切出来存在新的内存,而memoryview切出来的是缓存,不占用新的内存。
但只有支持buffer protocol(缓存协议)的数据类型才支持使用,所以表现形式是字节码,需要表现成字符串形式需要进行解码,但解码后同样新占内存
s = bytes(艾克你好,encoding=utf-8)
a = memoryview(s)
print(len(a))#字节长度
print(a[0])
print(a[1])
print(a[2])
print(bytes(a[0:]).decode(utf-8))#切片后解码

#打印:
12
232
137
190
艾克你好

内置函数:bytes、bytearray、memoryview

标签:数组   关键字   本质   view   解码   你好   存在   类型   通过   

原文地址:https://www.cnblogs.com/aizhinong/p/11407256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!