返回介绍

习题解答

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

1.Python 3.0有3种字符串类型:str(用于Unicode文本,包括ASCII)、bytes(用于带有绝对字节值的二进制数据)和bytearray(bytes的一种可变的形式)。str类型通常表示存储在文本文件中的内容,其他的两种形式通常表示存储在二进制文件中的内容。

2.Python 2.6有两种主要的字符串类型:str(用于8位文本和二进制数据)以及unicode(用于宽字符文本)。str类型用于文本和二进制文件内容,unicode用于通常比8位更复杂的文本文件内容。Python 2.6(但不包括更早的版本)也有Python 3.0的bytearray类型,但它主要是一种向后兼容,而且并没有表现出Python 3.0中所表现出来的鲜明的文本/二进制区别。

3.从Python 2.6到Python 3.0的字符串类型对应并不是直接的,因为Python 2.6的str等同于Python 3.0中的str和bytes,并且Python 3.0中的str等同于Python 2.6中的str和unicode。Python 3.0中bytearray的可变性是唯一的。

4.Python 3.0的字符串类型共享了几乎所有相同的操作:方法调用、序列操作,甚至像模式匹配这样以相同方式工作的更大工具。另一方面,只有str支持字符串格式操作,并且bytearray有一组额外的操作来执行原处修改。Str和bytes类型也分别拥有编码和解码文本的方法。

5.非ASCII Unicode字符可以以十六进制转移(\xNN)和Unicode转义(\uNNNN,\UNNNNNNNN)编写到一个字符串中。在某些键盘上,一些非ASCII字符——例如,某些Latin-1字符,也可以直接录入。

6.在Python 3.0中,文本模式文件假设其文件内容是Unicode文本(即便它是ASCII),并且当读取的时候自动解码,写入的时候自动编码。对于二进制模式的文件,bytes和文件之间不经修改地转换。文本模式文件的内容通常在脚本中表示为str对象,并且二进制文件的内容表示为bytes(或bytearray)对象。文本模式文件也针对特定编码类型处理bytearray,并且输入和输出时自动在行末序列与单个\n之间转换,除非显式地关闭这一功能。二进制模式的文件不会执行任何这样的步骤。

7.要读取和平台默认编码方式不同的方式编码的文件,直接把文件编码名传递给Python 3.0的内置函数open(在Python 2.6中是codecs.open());当从文件读取数据的时候,数据将针对每种特定编码来解码。我们也可以在二进制模式中读取,并且通过给定一个编码名来手动地把字节解码成一个字符串,但是,这涉及额外的工作,并且对于多字节字符更容易出错(可能偶尔要读取字节序列的一部分)。

8.要以特定编码格式创建一个Unicode文本文件,把想要的编码名称传递给Python 3.0中的open(在Python 2.6中是codecs.open())。当字符串写入文件中的时候,将会按照每个想要的编码来进行编码。也可以手动把一个字符串编码为字节,并在二进制模式下将其写入,但是,这通常需要额外的工作。

9.ASCII文本看作是一种Unicode文本,因为其7位范围值只是大多数Unicode编码的一个子集。例如,有效的ASCII文本也是有效的Latin-1文本(Latin-1只是把一个8位字节中其余可能的值分配给额外的字符),并且是有效的UTF-8文本(UTF-8为表示更多的字符定义了一个变量-字节方案,但是ASCII字符仍然用同样的代码表示,即单个的字节)。

10.Python 3.0的字符串类型修改的影响,取决于你所使用的字符串的类型。对于那些使用简单ASCII文本的脚本,可能根本没有影响:在此情况下,str字符串类型在Python 2.6和Python 3.0中的用法相同。此外,尽管标准库中像re、struct、pickle和xml这样字符串相关的工具可能在Python 3.0和Python 2.6中技术上的用法不同,但这一修改很大程度上与大多数程序不相关,因为Python 3.0的str和bytes以及Python 2.6的str都支持几乎相同的接口。如果你处理Unicode数据,只需要直接把Python 2.6的工具集unicode和codecs.open()转换为Python 3.0的str和open。如果你处理二进制数据文件,将需要处理作为bytes对象的内容。由于它们与Python 2.6字符串具有相似的接口,所以影响再次变得很小。

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

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

发布评论

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