Fluent Python: memoryview
关于Python的memoryview内置类,搜索国内网站相关博客后发现对其解释都很简单,
我觉得学习一个新的知识点一般都要弄清楚两点:
1, 什么时候使用?(也就是能解决什么问题) 2,如何使用?
对照Fluent Python一书2.9.2 以及网上相关资料后,对memoryview内置类做一些总结:
(1)什么时候应该使用memoryview内置类
Travis Oliphant在statkoverflow上是如此回答的:
# A memoryview is essentially a generalized NumPy array structure in
# Python itself (without the math). It allows you to share memory between # data-structures (things like PIL images, SQLlite data-bases, NumPy
# arrays, etc.) without first copying. This is very important for large data
# sets.
内存视图其实是泛化和去数学化的Numpy数组,它让你在不需要复制内容的前提下,在数据结构之间共享内存,其中数据结构可以是任何形式的,比如PIL图片,SQLite数据库,Numpy的数组等等
这个功能在处理大型数据集合的时候非常重要。
memoryview.cast()方法的概念跟数组模块类似,能用不同的方式读写同一块内存,而且内容字节不会随意移动,听上去和C语言的类型转换的概念很像。
(2) 如何使用memoryview:
我们还是通过示例来看看如何使用memoryview(利用memoryview精准的修改一个数组的某个字节):
我们先定义一个数组,里面每一个元素都是unsigned short类型:
>>> numbers = array('h', [-2, -1, 0, 1, 2]) # # type 'h': signed short
然后把这个数组传入memoryview的构造函数创建实例, 并查看memoryview实例的长度和成员:
>>> mem_short = memoryview(numbers)
>>> len(mem_short)
5
>>> mem_short[0]
-2
>>> mem_short.tolist()
[-2, -1, 1024, 1, 2] >>> len(numbers)
5
>>> numbers[0]
-2
从控制台的输出可以看到memoryview的元素个数和内容与array.array是一样的。
接下来我们将mem_short的内容转换为‘B’类型,即unsighed char类型,并查看其内容
>>> mem_octets = mem_short.cast('B') # type 'B': unsigned char
>>> mem_octets.tolist()
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
把位于位置5的unsighed char内容赋值为其他值,比如4:
>>> mem_octets[5] = 4
我们并没有对numbers 这个array实例操作,但是我们查看其内容却发现numbers已被修改:
>>> numbers
array('h', [-2, -1, 1024, 1, 2])
从上面的示例我们可以看出如何利用memoryview来操作二进制序列。
Fluent Python: memoryview的更多相关文章
- 《Fluent Python》---一个关于memoryview例子的理解过程
近日,在阅读<Fluent Python>的第2.9.2节时,有一个关于内存视图的例子,当时看的一知半解,后来查了一些资料,现在总结一下,以备后续查询: 示例复述 添加了一些额外的代码,便 ...
- 学习笔记之Fluent Python
Fluent Python by Luciano Ramalho https://learning.oreilly.com/library/view/fluent-python/97814919462 ...
- 「Fluent Python」今年最佳技术书籍
Fluent Python 读书手记 Python数据模型:特殊方法用来给整个语言模型特殊使用,一致性体现.如:__len__, __getitem__ AOP: zope.inteface 列表推导 ...
- Python memoryview() 函数
Python memoryview() 函数 Python 内置函数 描述 memoryview() 函数返回给定参数的内存查看对象(Momory view). 所谓内存查看对象,是指对支持缓冲区协 ...
- Python深入学习之《Fluent Python》 Part 1
Python深入学习之<Fluent Python> Part 1 从上个周末开始看这本<流畅的蟒蛇>,技术是慢慢积累的,Python也是慢慢才能写得优雅(pythonic)的 ...
- Fluent Python: Classmethod vs Staticmethod
Fluent Python一书9.4节比较了 Classmethod 和 Staticmethod 两个装饰器的区别: 给出的结论是一个非常有用(Classmethod), 一个不太有用(Static ...
- Fluent Python: @property
Fluent Python 9.6节讲到hashable Class, 为了使Vector2d类可散列,有以下条件: (1)实现__hash__方法 (2)实现__eq__方法 (3)让Vector2 ...
- Fluent Python: Mutable Types as Parameter Defaults: Bad Idea
在Fluent Python一书第八章有一个示例,未看书以先很难理解这个示例运行的结果,我们先看结果,然后再分析问题原因: 定义了如下Bus类: class Bus: def __init__(sel ...
- 流畅的Python (Fluent Python) —— 第二部分01
2.1 内置序列类型概览 Python 标准库用 C 实现了丰富的序列类型,列举如下. 容器序列 list. tuple 和 collections.deque 这些序列能存放不同类型的数据. 扁平序 ...
随机推荐
- DBA手记-BBED 的说明
在10g中连接生成bbed:cd $ORACLE_HOME/rdbms/libmake -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed 11g中缺省未提供BBE ...
- vue父子组件之间的传值
引入组件 父组件 <div> <form-edit></form-edit> </div> import FormEdit from "路径& ...
- win 10 如何关闭自动更新
1.右键“此电脑”图标,点击“管理”,打开“计算机管理”窗口; 2.在“计算机管理”窗口中找到“服务和应用程序”,点击“服务”,打开“服务”窗口; 3.在“服务”中找到“Windows Update” ...
- MySQL语句的优化
1.使用limit 当不需要取出全部数据时,在查询后面加上limit限制. 2.select * 每次看到select * 的时候都需要用怀疑的眼光审视,是不是真的需要返回全部的列. 3.重复查询相同 ...
- 每天一个linux命令(1):find命令之exec
ind是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释:-exec 参数后面跟的是command命令, ...
- Spring Web Async异步处理#Callable #DeferredResult
Spring MVC 对于异步请求处理的两种方式 场景: Tomcat对于主线程性能瓶颈,当Tomcat请求并发数过多时,当线程数满时,就会出现请求等待Tomcat处理,这个时候可以使用子线程处理业务 ...
- kubernetes命令式容器应用编排/部署应用/探查应用详情/部署service对象/扩缩容/修改删除对象
部署Pod应用 创建delpoyment控制器对象 [root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --port=80 ...
- php安装redis拓展
1. 查看是否安装redis库 查看是否安装redis库了.可以通过下面2种方式查看. phpinfo()是否能输出redis的加载信息 在命令行执行`php -m` 输出gd 2. 安装redis库 ...
- vue手脚架安装和项目创建
一 node安装 1 如果不确定自己是否安装了node,可以在命令行工具内执行:node -v: 2如果执行结果显示:xx不是内部命令,说明你还没有安装node,node按爪给你地址 : http:/ ...
- 20155306 实验二 Java面向对象程序设计
20155306 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要 ...