‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
b = ‘测试用例a’.encode(‘utf8’)
b[-1] = 98 # change ‘a’ -> ‘b’
Traceback (most recent call last):
File “”, line 1, in TypeError: ‘bytes’ object does not support item assignment
而当我们把bytes的内容复制给bytearray
时就可以进行原地修改了:
array = bytearray(b)
array[-1] = 98
array.decode(‘utf8’)
测试用例b
bytearray
对象没有字面常量,因此只能通过构造函数创建,它有着和bytes一样的方法,只是可变以及多了一些序列对象的特性。如果要创建一个bytearray
可以有如下的几种方法:
-
bytearray()
返回一个空的bytearray
对象 -
bytearray(10)
创建一个长度为10且内容被0填充的bytearray
-
bytearray(iterable)
会将可迭代对象的内容转换成bytes然后存入对象中 -
bytearray(b'Hi!')
将已有的二进制数据复制进对象
另外bytearray还提供了fromhex和hex方便将数据以16进制的形式输入输出:
array.hex()
‘e6b58be8af95e794a8e4be8b62’
bytearray().fromhex(‘e6b58be8af95e794a8e4be8b62’).decode(‘utf8’)
‘测试用例b’
memoryview
memoryview
提供了直接访问对象内存的机制,只要目标对象支持buffer protocol,例如bytes
和bytearray
。
memoryview有个称为“元素”的概念,也就是对象规定的最小的内存单元,比如bytes和bytearray的最小内存单元就是一个byte,具体取决于对象的实现。
len(view)通常等于len(view.tolist()),也就是等于view的“元素”数量。如果view.ndim == 0
,那么整个view的内存会被视作一个整体,len会返回1,如果view.ndim == 1
那么就正常返回“元素”的个数。view.itemsize会返回单个“元素”的大小。单位是byte。
view.readonly表示当前的memoryview是否是只读的,例如bytes对象的view就是只读的,view.readonly的值为True。是否只读取决于被引用的对象是否可变以及对buffer protocol的实现。
对于使用完毕的memoryview应该尽快调用其release()方法释放资源,而且部分对象在被view引用时会自动进行一些限制,比如bytearray会禁止调整大小,及时释放view是资源可以解除这些限制。
结合示例可以更清晰地了解这些特性:
‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
data = bytearray(b’abcefg’)
v = memoryview(data)
v.readonly
False
v[0] = ord(b’z’)
data
bytearray(b’zbcefg’)
v[1:4] = b’123’
data
bytearray(b’z123fg’)
v[2:3] = b’spam’
Traceback (most recent call last):
File “”, line 1, in
ValueError: memoryview assignment: lvalue and rvalue have different structures
v[2:6] = b’spam’
data
bytearray(b’z1spam’)
dict-views
准确的说,这不是一种类型,而是一种概念。然而typing里仍然将其视为一种类型,所以也就罗列在此了。
概念:返回自dict.keys(),dict.values()和dict.items()的对象被称作dict-views。
对于views对象,可以使用len,成员检测,它本身也是可迭代对象:
dishes = {‘eggs’: 2, ‘sausage’: 1, ‘bacon’: 1, ‘spam’: 500}
keys = dishes.keys()
values = dishes.values()
iteration
n = 0
for val in values:
… n += val
print(n)
504
keys and values are iterated over in the same order (insertion order)
list(keys)
[‘eggs’, ‘sausage’, ‘bacon’, ‘spam’]
list(values)
[2, 1, 1, 500]
view objects are dynamic and reflect dict changes
del dishes[‘eggs’]
del dishes[‘sausage’]
list(keys)
[‘bacon’, ‘spam’]
set operations
keys & {‘eggs’, ‘bacon’, ‘salad’}
{‘bacon’}
keys ^ {‘sausage’, ‘juice’}
{‘juice’, ‘sausage’, ‘bacon’, ‘spam’}
从例子中可以看出,views保持着元素的插入顺序(插入顺序的保证从python3.6开始)以及views动态反应了key/value的插入和删除以及修改,因此在某些场景下views对象是相当有用的。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
mg-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
![img](https://img-blog.csdnimg.cn/img_convert/79ef4a65f4dfcc4aa0750a20bebcde80.jpeg)