cast(format[, shape])
Cast a memoryview to a new format or shape. shape defaults to [byte_length//new_itemsize]
, which means that the result view will be one-dimensional. The return value is a new memoryview, but the buffer itself is not copied. Supported casts are 1D -> C-contiguous and C-contiguous -> 1D.
The destination format is restricted to a single element native format in struct
syntax. One of the formats must be a byte format (‘B’, ‘b’ or ‘c’). The byte length of the result must be the same as the original length.
Cast 1D/long to 1D/unsigned bytes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >>> 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 |
Cast 1D/unsigned bytes to 1D/char:
1 2 3 4 5 6 7 8 9 10 | >>> 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' ) |
Cast 1D/bytes to 3D/ints to 1D/signed char:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | >>> 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 |
Cast 1D/unsigned char to 2D/unsigned long:
1 2 3 4 5 6 7 8 9 | >>> 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]] |
New in version 3.3.
Changed in version 3.5: The source format is no longer restricted when casting to a byte view.
Please login to continue.