当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python memoryview.cast用法及代码示例


用法:

cast(format[, shape])

将内存视图转换为新格式或形状。 shape 默认为 [byte_length//new_itemsize] ,这意味着结果视图将是一维的。返回值是一个新的内存视图,但缓冲区本身并没有被复制。支持的转换为 1D -> C-contiguous 和 C-contiguous -> 1D。

目标格式仅限于 struct 语法中的单元素本机格式。其中一种格式必须是字节格式(‘B’,‘b’ or ‘c’)。结果的字节长度必须与原始长度相同。

将 1D/long 转换为 1D/无符号字节:

>>> import array
>>> a = array.array('l', [1,2,3])
>>> x = memoryview(a)
>>> x.format
'l'
>>> x.itemsize
8
>>> len(x)
3
>>> x.nbytes
24
>>> y = x.cast('B')
>>> y.format
'B'
>>> y.itemsize
1
>>> len(y)
24
>>> y.nbytes
24

将一维/无符号字节转换为一维/字符:

>>> b = bytearray(b'zyz')
>>> x = memoryview(b)
>>> x[0] = b'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: memoryview: invalid value for format "B"
>>> y = x.cast('c')
>>> y[0] = b'a'
>>> b
bytearray(b'ayz')

将 1D/bytes 转换为 3D/ints 转换为 1D/signed char:

>>> import struct
>>> buf = struct.pack("i"*12, *list(range(12)))
>>> x = memoryview(buf)
>>> y = x.cast('i', shape=[2,2,3])
>>> y.tolist()
[[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]
>>> y.format
'i'
>>> y.itemsize
4
>>> len(y)
2
>>> y.nbytes
48
>>> z = y.cast('b')
>>> z.format
'b'
>>> z.itemsize
1
>>> len(z)
48
>>> z.nbytes
48

将 1D/unsigned long 转换为 2D/unsigned long:

>>> buf = struct.pack("L"*6, *list(range(6)))
>>> x = memoryview(buf)
>>> y = x.cast('L', shape=[2,3])
>>> len(y)
2
>>> y.nbytes
48
>>> y.tolist()
[[0, 1, 2], [3, 4, 5]]

3.3 版中的新函数。

在 3.5 版中更改:转换为字节视图时,源格式不再受到限制。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 memoryview.cast。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。