返回介绍

Python 的字符串类型

发布于 2024-01-29 22:24:14 字数 2296 浏览 0 评论 0 收藏 0

具体来说,Python语言提供了字符串类型在脚本中表示字符文本。在脚本中所使用的字符串类型取决于所使用的Python的版本。Python 2.X有一种通用的字符串类型来表示二进制数据和像ASCII这样的8位文本,还有一种特定的类型用来表示多字节Unicode文本:

·str表示8位文本和二进制数据。

·unicode用来表示宽字符Unicode文本。

Python 2.X的两种字符串类型是不同的(unicode考虑到字符的额外大小并且支持编码和解码),但是,它们的操作集大多是重叠的。Python 2.X中的str字符串类型用于可以用8位字节表示的文本,以及绝对字节值所表示的二进制数据。

相反,Python 3.X带有3种字符串对象类型——一种用于文本数据,两种用于二进制数据:

·str表示Unicode文本(8位的和更宽的)。

·bytes表示二进制数据。

·bytearray,是一种可变的bytes类型。

正如前面所提到的,bytearray在Python 2.6中可以使用,但它是从Python 3.0才有的升级功能,此后较少有特定内容的行为,并且通常看做是一个Python 3.0类型。

Python 3.0中所有3种字符串类型都支持类似的操作集,但是,它们都有不同的角色。Python 3.X之后关于这一修改的主要目标是,把Python 2.X中常规的和Unicode字符串类型合并到一个单独的字符串类型中,以支持常规的和Unicode文本:开发者想要删除Python 2.X中的字符串区分,并且让Unicode的处理更加自然。假设ASCII和其他的8位文本真的是一种简单的Unicode,这种融合听起来很符合逻辑。

为了实现这一点,Python 3.0的str类型定义为一个不可改变的字符序列(不一定是字节),这可能是像ASCII这样的每个字符一个字节的常规文本,或者是像UTF-8 Unicode这样可能包含多字节字符的字符集文本。你的脚本所使用的字符串处理,带有这种每个平台默认编码的类型,但是,在内存中以及在文件之间来回转换的时候,将会提供明确的编码名,以便在str对象和不同的方案之间来回转换。

尽管Python 3.0新的str类型确实实现了想要的字符串/Unicode结合,但很多程序仍然需要处理那些没有针对每个任意文本格式都编码的raw字节数据。图像和声音文件,以及用来与设备接口的打包数据,或者你想要用Python的struct模块处理的C程序,都属于这一类型。因此,为了支持真正的二进制数据的处理,还引入了一种新的类型,即bytes。

在Python 2.X中,通用的str类型填补了二进制数据的这一角色,因为字符串也只是字节的序列(单独的unicode类型处理宽字符串)。在Python 3.0中,bytes类型定义为一个8位整数的不可变序列,表示绝对的字节值。此外,Python 3.0的bytes类型支持几乎str类型所做的所有相同操作:这包括字符串方法、序列操作,甚至r e模块模式匹配;但是不包括字符串格式化。

一个Python 3.0 bytes对象其实只是较小整数的一个序列,其中每个整数的范围都在0到255之间;索引一个bytes将返回一个int,分片一个bytes将返回另一个bytes,并且在一个bytes上运行内置函数list将返回整数,而不是字符的一个列表。当用那些假设字符的操作处理bytes的时候,bytes对象的内容被假设为ASCII编码的字节(例如,isalpha方法假设每个字节都是一个ASCII字符代码)。此外,为了方便起见,bytes对象打印为字符串而不是整数。

尽管如此,Python的开发者也在Python 3.0中添加了一个bytearray类型,bytearray是bytes类型的一个变体,它是可变的并且支持原处修改。它支持str和bytes所支持的常见的字符串操作,以及和列表相同的很多原处修改操作(例如,append和extend方法,以及向索引赋值)。假设字符串可以作为raw字节对待,bytearray最终为字符串数据添加了直接原处可修改的能力,这在Python 2.0中不通过转换为一个可变类型是不可能做到的,并且也是Python 3.0的str或bytes所不支持的。

尽管Python 2.6和Python 3.0提供了很多相同的功能,但它们还是以不同方式包装了功能。实际上,从Python 2.6到Python 3.0的字符串类型映射并不是直接的,Python 2.8的str等同于Python 3.0中的str和bytes,并且Python 3.0的str等同于Python 2.6中的str和Unicode。此外,Python 3.0的可变的bytearray是独特的。

然而,实际上,这种不对称并不像听上去那么令人生畏。它可以概括如下:在Python 2.6中,我们可以对简单的文本使用str并且对文本的更高级的形式使用二进制数据和unicode;在Python 3.0中,我们将针对任何类型的文本(简单的和Unicode)使用str,并且针对二进制数据使用bytes或bytearray。实际上,这种选择常常由你所使用的工具决定,尤其是在文件处理工具的例子中,这是下一小节的主题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文