第 7 章 弦乐基础 弦乐基础
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
到目前为止,我们已经学习了数字并探索了 Python 的动态类型模型。我们深入核心对象之旅的下一个主要类型是 Python字符串--一个有序的字符集,用于存储和表示基于文本和字节的信息。我们在第 4 章中简要介绍了字符串。在这里,我们将更深入地重访字符串,补充一些我们之前跳过的细节。
本章的范围
在开始之前,我还想说明一下我们在这里不会涉及的内容。第 4 章简要介绍了Unicode字符串和文件--处理非 ASCII 文本的工具。对于一些程序员,尤其是互联网领域的程序员来说,Unicode 是一个重要工具。例如,它可以出现在网页、电子邮件内容和标题、FTP 传输、GUI API、目录工具以及 HTML、XML 和 JSON 文本中。
与此同时,Unicode 对于刚入门的程序员来说是一个沉重的话题,我现在遇到的许多(或大多数) Python 程序员在工作中仍然对整个话题一无所知。有鉴于此,本书将大部分 Unicode 故事放在高级主题部分的第 37 章,作为选读内容,并在此重点介绍字符串基础知识。
也就是说,本章只讲述了 Python 中字符串故事的一部分--大多数脚本使用的部分和大多数程序员需要了解的部分。本章探讨了基本的str 字符串类型,它处理 ASCII 文本,无论您使用哪个版本的 Python,它都能正常工作。尽管有意限制了范围,但由于str 在 Python 3.X 中也处理 Unicode,而单独的unicode类型在 2.X 中的工作原理与str 几乎相同,因此我们在这里学到的所有知识也将直接应用于 Unicode 处理。
统一码小故事
对于关心 Unicode 的读者,我还想对其影响做一个简要总结,并为进一步研究提供一些参考。从形式上看,ASCII 是 Unicode 文本的一种简单形式,但只是许多可能的编码和字母中的一种。来自非英语国家的文本可能使用截然不同的字母,在文件中存储时的编码也可能截然不同。
正如我们在第 4 章中看到的,Python 通过区分文本数据和二进制数据来解决这个问题,并为每种数据提供了不同的字符串对象类型和文件接口。每个 Python 行对字符串的支持各不相同:
在Python 3.X中,有三种字符串类型:
str用于 Unicode 文本 (包括 ASCII),bytes用于二进制数据 (包括编码后的文本),bytearray是bytes的可变变体。文件以两种模式工作:文本模式,即将内容 表示为str,并实现 Unicode 编码;二进制模式,即处理原始bytes,不进行数据转换。在Python 2.X 中,
unicode字符串表示 Unicode 文本,str字符串同时处理 8 位文本和二进制数据,bytearray作为 3.X 的回传端口在 2.6 及以后版本中可用。普通文件的内容只是以str表示的字节,但codecs模块打开 Unicode 文本文件,处理编码,并以unicode对象表示内容。
尽管存在这些版本差异,但如果您确实需要关注 Unicode,您会发现它只是一个相对次要的扩展--一旦文本进入内存,它就是一个 Python 字符串,支持本章将要学习的所有基础知识。事实上,Unicode 的主要区别往往在于将其移入或移出文件所需的翻译(又称编码)步骤 。除此之外,它在很大程度上只是字符串处理。
不过,由于大多数程序员不需要提前掌握 Unicode 的细节,我还是将大部分细节移到了 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access