繁体   English   中英

为什么没有字符/码点字符串等同于`collections.abc.ByteString`?

[英]Why no character/codepoint string equivalant of `collections.abc.ByteString`?

Python的collections.abc模块提供了SequenceMutableSequence抽象基类(ABCs),它们涵盖了strbytesbytearray和类似的类型。

collections.abc还提供了ByteString ABC,它涵盖了bytesbytes bytearray和大概类似的类型。 但它没有为字符串或代码点(如str提供ABC。 (这样的ABC可能被命名为StringCharStringCodepointString 。)为什么它不提供前者而不是后者? (换句话说,需要前者而不是后者的预期用例是什么?)


¹'封面'如同,子类型是实例isinstance() ABC。

添加了ByteString ,为您提供了一种方法来测试3.x文档中出现的“字节类型”,而无需编写(bytes, bytearray)

事实上,它的文档字符串只是“这统一字节和字节数组”。

Unicode字符串没有类似的需要,因为str是唯一这样的类型; 没有什么可以统一它。

您可以单击文档顶部的源链接,找到ByteString ,并git blame是正确的,从GitHub的GUI找提交是添加它 签到评论是:

添加ABC ByteString,它统一了字节和bytearray(但不是内存视图)。

“PEP 3118样式缓冲API对象”没有ABC,因为在Python中无法识别这些(除了尝试在它们上使用memoryview())。

请注意,array.array确实应该注册为MutableSequence,但是只要导入集合就需要导入它。

如果您真的想深入挖掘,可能会在2007年11月21日左右进一步讨论bpopython-devpython-ideas邮件列表档案。 但我怀疑那里有更多的兴趣,因为这里真的没什么可讨论的。


请注意, typing实际上确实有一个类型, Text ,它记录为:

Textstr的别名。 它提供了为Python 2代码提供前向兼容路径:在Python 2中,Text是unicode的别名。

使用Text指示值必须以与Python 2和Python 3兼容的方式包含unicode字符串:

正如文档所表明的那样,在同一种语言中统一多个Unicode字符串类型并没有添加,而是在静态类型检查时统一Python 2 unicode和Python 3 str

在运行时,如果你想要这个,你几乎肯定想要实际的strunicode构造函数,所以你要使用像six.text_type这样的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM