如何在Python 3字符串上使用memoryview?

3
在Python 3中,执行以下代码:
memoryview("this is a string")

产生错误:

TypeError: memoryview: str object does not have the buffer interface

我应该怎么做才能让memoryview接受字符串,或者为了被memoryview接受,我应该对我的字符串进行什么转换?

2个回答

4
文档中可以了解到,memoryview仅适用于支持bytesbytearray接口的对象。(这些类型很相似,只是前者是只读的。)
在Python 3中,字符串不是我们可以直接操作的原始字节缓冲区,而是Unicode符文或字符的不可变序列。但是,通过使用任何受支持的字符串编码(如'utf-8'、'ascii'等)对str进行编码,就可以将其转换为缓冲区。
memoryview(bytes("This is a string", encoding='utf-8'))

注意,bytes()调用必然涉及将字符串数据转换并复制到一个新的缓冲区中,该缓冲区可被memoryview访问。正如前面的段落所示,不可能直接在str的数据上创建memoryview

3

考虑到错误已经清楚地说明了问题,以及camflint的答案,我只想补充一点:您可以简洁地使用以下方法从字符串创建memoryview实例:

memoryview( b"this is a string" )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接