1
1
这里描述了一组要实现的方法,以便扩展类型支持缓冲区协议: http://docs.python.org/3.1/c-api/typeobj.html#buffer-object-structures 我认识到文档相当粗糙,所以我能给出的最好建议是从现有的C类型的缓冲区API实现开始,例如在正式的python源代码中的bytesobject.c或bytearrayobject.c。
但是,请注意,缓冲协议不允许访问高级符号,如您引用的符号:
编辑: 更精确地说,memoryview支持某些类型的切片分配,但不支持所有类型的切片分配。此外,它们还不够“智能”,无法理解将255分配给一个切片实际上意味着需要重复字节值。例子: >>> b = bytearray(b"abcd") >>> m = memoryview(b) >>> m[0:2] = b"xy" >>> b bytearray(b'xycd') >>> m[0:2] = 255 Traceback (most recent call last): File "", line 1, in TypeError: 'int' does not support the buffer interface >>> m[0:2] = b"x" Traceback (most recent call last): File "", line 1, in ValueError: cannot modify size of memoryview object >>> m[0::2] = b"xy" Traceback (most recent call last): File "", line 1, in NotImplementedError |