mac*_*mac 10 c python python-2.x python-2.7 memoryview
Python 2.7 为缓冲区和内存视图对象引入了一个新的API.
我阅读了关于它们的文档,我认为我得到了基本的概念(以原始形式访问对象的内部数据而不复制它,我想这意味着"更快,更少内存的"获取对象数据的方式),但要真正理解文档,读者应该具备超越我所拥有的C知识.
如果有人愿意花时间,我将非常感激:
这是我写的哈希函数的一行:
M = tuple(buffer(M, i, Nb) for i in range(0, len(M), Nb))
Run Code Online (Sandbox Code Playgroud)
这会将长字符串M拆分为长度为Nb的较短"字符串",其中Nb是我一次可以处理的字节数/字符数.它执行此操作而不复制字符串的任何部分,如果我像这样制作字符串切片会发生这种情况:
M = tuple(M[i*Nb:i*Nb+Nb] for i in range(0, len(M), Nb))
Run Code Online (Sandbox Code Playgroud)
我现在可以按照我切片的方式迭代M:
H = key
for Mi in M:
H = encrypt(H, Mi)
Run Code Online (Sandbox Code Playgroud)
基本上,缓冲区和内存视图是处理Python中字符串不变性的有效方法,以及切片等的一般复制行为.内存视图就像一个缓冲区,除了你也可以写入它,而不仅仅是读取.
虽然主缓冲区/ memoryview文档是关于C实现的,但标准类型页面在memoryview下有一些信息:http://docs.python.org/library/stdtypes.html#memoryview-type
编辑:在我的书签http://webcache.googleusercontent.com/search?q=cache:Ago7BXl1_qUJ:mattgattis.com/2010/3/9/python-memory-views+site:mattgattis.com+python&hl=中找到了这个en&client = firefox-a&gl = us&strip = 1是一个非常好的简短写作.
编辑2:结果我从什么时候应该使用memoryview?首先,这个问题从来没有得到详细解答,链接已经死了,所以希望这会有所帮助.