标签:数组 关键字 本质 view 解码 你好 存在 类型 通过
bytes:字节组成的有序不可变序列
bytearray:在phthon3当中新增的bytearray为字节组成的可变序列,修改字节不会生成新的序列
字符串以字符为单位,转换成bytes类型以字节为单位,两者并无区别,本质都是编译成计算机可以读懂的01010101字节码
两者参数一样:
创建:
name = bytes(‘aike‘,encoding=‘utf-8‘) #通过关键字创建 name1 = b‘aike‘ #直接指定字符串为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