通用 Python 常见问题解答

基本信息

什么是 Python?

Python 是一种解释型的、交互式的、面向对象的编程语言。它包含模块、异常、动态类型、非常高级的动态数据类型和类。它支持面向对象编程之外的多种编程范式,例如过程式和函数式编程。Python 将强大的功能与非常清晰的语法相结合。它具有许多系统调用和库的接口,以及各种窗口系统,并且可以在 C 或 C++ 中扩展。它也可以用作需要可编程接口的应用程序的扩展语言。最后,Python 是可移植的:它在许多 Unix 变体(包括 Linux 和 macOS)以及 Windows 上运行。

要了解更多信息,请从Python 教程开始。Python 初学者指南链接到其他入门教程和学习 Python 的资源。

什么是 Python 软件基金会?

Python 软件基金会是一个独立的非营利组织,拥有 Python 2.1 及更高版本的版权。PSF 的使命是推进与 Python 编程语言相关的开源技术,并宣传 Python 的使用。PSF 的主页位于 https://pythonlang.cn/psf/

向 PSF 的捐款在美国是免税的。如果您使用 Python 并发现它有帮助,请通过PSF 捐赠页面进行捐款。

Python 最初是如何创建的?

这是 Guido van Rossum 撰写的关于这一切如何开始的非常简短的总结

我在 CWI 的 ABC 小组中拥有实现解释型语言的丰富经验,并且通过与该小组合作,我学到了很多关于语言设计的知识。这是许多 Python 功能的起源,包括使用缩进进行语句分组以及包含非常高级的数据类型(尽管 Python 中的细节都不同)。

我对 ABC 语言有一些不满,但也喜欢它的许多功能。不可能扩展 ABC 语言(或其实现)来解决我的抱怨——事实上,它缺乏可扩展性是它最大的问题之一。我有一些使用 Modula-2+ 的经验,并与 Modula-3 的设计者进行了交谈,并阅读了 Modula-3 报告。Modula-3 是用于异常的语法和语义以及其他一些 Python 功能的起源。

我当时在 CWI 的 Amoeba 分布式操作系统小组工作。我们需要一种比编写 C 程序或 Bourne shell 脚本更好的方法来进行系统管理,因为 Amoeba 有自己的系统调用接口,而该接口不容易从 Bourne shell 访问。我在 Amoeba 中的错误处理经验使我敏锐地意识到异常作为一种编程语言功能的重要性。

我想到一种语法类似于 ABC 但可以访问 Amoeba 系统调用的脚本语言可以满足这一需求。我意识到编写一种特定于 Amoeba 的语言是愚蠢的,所以我决定我需要一种普遍可扩展的语言。

在 1989 年的圣诞节假期期间,我有很多空闲时间,所以我决定试一试。在接下来的一年中,虽然我仍然主要在自己的时间里进行工作,但 Python 在 Amoeba 项目中的使用越来越成功,同事的反馈使我添加了许多早期的改进。

在 1991 年 2 月,经过一年多的开发,我决定在 USENET 上发布。其余的都在 Misc/HISTORY 文件中。

Python 有什么用?

Python 是一种高级通用编程语言,可应用于许多不同类型的问题。

该语言带有一个大型标准库,涵盖字符串处理(正则表达式、Unicode、计算文件之间的差异)、互联网协议(HTTP、FTP、SMTP、XML-RPC、POP、IMAP)、软件工程(单元测试、日志记录、性能分析、解析 Python 代码)和操作系统接口(系统调用、文件系统、TCP/IP 套接字)等领域。查看Python 标准库的目录,了解可用的内容。还提供了各种第三方扩展。请查阅Python 包索引以查找您感兴趣的软件包。

Python 版本编号方案是如何工作的?

Python 版本编号为 “A.B.C” 或 “A.B”

  • A 是主版本号——只有在语言发生真正重大更改时才会递增。

  • B 是次版本号——对于不太重要的更改会递增。

  • C 是微版本号——对于每个错误修复版本都会递增。

并非所有版本都是错误修复版本。在新功能版本发布之前,会发布一系列开发版本,表示为 alpha、beta 或候选版本。Alpha 是早期版本,其中的接口尚未最终确定;在两个 alpha 版本之间看到接口更改并不意外。Beta 更稳定,保留现有接口,但可能会添加新模块,而候选版本是冻结的,除了修复关键错误外,不会进行任何更改。

Alpha、beta 和候选版本具有附加的后缀

  • alpha 版本的后缀为 “aN”,其中 N 为某个较小的数字。

  • beta 版本的后缀为 “bN”,其中 N 为某个较小的数字。

  • 候选版本的后缀为 “rcN”,其中 N 为某个较小的数字。

换句话说,所有标记为 2.0aN 的版本都先于标记为 2.0bN 的版本,后者先于标记为 2.0rcN 的版本,而这些版本先于 2.0。

您可能还会发现带有 “+” 后缀的版本号,例如 “2.2+”。这些是未发布的版本,直接从 CPython 开发存储库构建。实际上,在发布最终次要版本后,版本会递增到下一个次要版本,该版本将成为 “a0” 版本,例如 “2.4a0”。

有关开发周期的更多信息,请参阅开发者指南,并参阅 PEP 387 以了解有关 Python 向后兼容性策略的更多信息。另请参阅 sys.versionsys.hexversionsys.version_info 的文档。

如何获取 Python 源代码副本?

最新的 Python 源代码分发始终可在 python.org 上获取,网址为https://pythonlang.cn/downloads/。最新的开发源代码可在https://github.com/python/cpython/上获取。

源代码分发是一个 gzipped tar 文件,其中包含完整的 C 源代码、Sphinx 格式的文档、Python 库模块、示例程序以及一些有用的可自由分发的软件。源代码将在大多数 UNIX 平台上开箱即用。

有关获取源代码和编译源代码的更多信息,请参阅Python 开发者指南的入门部分

如何获取关于 Python 的文档?

当前稳定版本的 Python 的标准文档可在 https://docs.pythonlang.cn/3/ 上获取。PDF、纯文本和可下载的 HTML 版本也可在 https://docs.pythonlang.cn/3/download.html 上获取。

该文档使用 reStructuredText 编写,并由 Sphinx 文档工具处理。文档的 reStructuredText 源代码是 Python 源代码分发的一部分。

我以前从未编程过。有 Python 教程吗?

有很多可用的教程和书籍。标准文档包括Python 教程

请查阅初学者指南,查找为 Python 初学者提供的相关信息,包括教程列表。

是否有专门讨论 Python 的新闻组或邮件列表?

有一个新闻组 comp.lang.python 和一个邮件列表 python-list。新闻组和邮件列表是相互网关的 —— 如果你能阅读新闻,则无需订阅邮件列表。comp.lang.python 的流量很高,每天收到数百条帖子,Usenet 阅读器通常更能应对这种数量。

新软件发布和活动的公告可以在 comp.lang.python.announce 中找到,这是一个低流量的审核列表,每天收到大约五条帖子。它作为 python-announce 邮件列表提供。

有关其他邮件列表和新闻组的更多信息,请访问 https://pythonlang.cn/community/lists/

如何获取 Python 的 Beta 测试版本?

Alpha 和 Beta 版本可从 https://pythonlang.cn/downloads/ 获取。所有版本都会在 comp.lang.python 和 comp.lang.python.announce 新闻组以及 Python 主页 https://pythonlang.cn/ 上发布;新闻的 RSS 源可用。

您还可以通过 Git 访问 Python 的开发版本。有关详细信息,请参阅Python 开发者指南

如何提交 Python 的错误报告和补丁?

要报告错误或提交补丁,请使用 https://github.com/python/cpython/issues 上的问题跟踪器。

有关 Python 如何开发的更多信息,请查阅 Python 开发者指南

是否有关于 Python 的已发表文章可以作为参考?

最好引用您最喜欢的关于 Python 的书。

关于 Python 的第一篇文章写于 1991 年,现在已经过时了。

Guido van Rossum 和 Jelke de Boer,“使用 Python 编程语言交互式测试远程服务器”,CWI Quarterly,第 4 卷,第 4 期(1991 年 12 月),阿姆斯特丹,第 283-303 页。

是否有关于 Python 的书籍?

是的,有很多,而且还在不断出版。有关列表,请参阅 python.org wiki https://wiki.python.org/moin/PythonBooks

您还可以在在线书店搜索“Python”,并过滤掉 Monty Python 的引用;或者可以搜索“Python”和“语言”。

www.python.org 在世界上的哪个位置?

Python 项目的基础设施遍布世界各地,由 Python 基础设施团队管理。详细信息请访问此处

为什么叫 Python?

当 Guido van Rossum 开始实现 Python 时,他还在阅读 “Monty Python 的飞行马戏团” 的已出版剧本,这是一个 1970 年代的 BBC 喜剧系列。Van Rossum 认为他需要一个简短、独特且略带神秘感的名字,因此他决定将该语言命名为 Python。

我必须喜欢“Monty Python 的飞行马戏团”吗?

不,但这会有帮助。 :)

现实世界中的 Python

Python 有多稳定?

非常稳定。自 1991 年以来,大约每 6 到 18 个月就会发布新的稳定版本,这种情况似乎还会继续。从 3.9 版开始,Python 将每 12 个月发布一个新的功能版本(PEP 602)。

开发人员会发布旧版本的错误修复版本,因此现有版本的稳定性会逐渐提高。错误修复版本由版本号的第三个组成部分表示(例如 3.5.3、3.6.2),这些版本是为了稳定性而管理的;错误修复版本中仅包含已知问题的修复程序,并且保证接口在整个错误修复版本系列中保持不变。

最新的稳定版本始终可以在 Python 下载页面上找到。Python 3.x 是推荐版本,并且受到大多数广泛使用的库的支持。Python 2.x 不再维护

有多少人正在使用 Python?

可能有数百万用户,尽管很难获得确切的计数。

Python 可免费下载,因此没有销售数据,并且可以从许多不同的站点获取,并与许多 Linux 发行版打包在一起,因此下载统计数据也不能说明全部情况。

comp.lang.python 新闻组非常活跃,但并非所有 Python 用户都会在该组中发帖或甚至阅读它。

是否有用 Python 完成的重大项目?

有关使用 Python 的项目列表,请参阅 https://pythonlang.cn/about/success。查阅 过去 Python 会议的记录将揭示来自许多不同公司和组织的贡献。

引人注目的 Python 项目包括 Mailman 邮件列表管理器Zope 应用程序服务器。一些 Linux 发行版,最著名的是 Red Hat,已使用 Python 编写了部分或全部安装程序和系统管理软件。内部使用 Python 的公司包括 Google、Yahoo 和 Lucasfilm Ltd.

未来 Python 有哪些新发展?

请参阅 https://peps.pythonlang.cn/ 获取 Python 增强提案 (PEP)。PEP 是描述 Python 建议的新功能的设计文档,提供了简洁的技术规范和理由。查找标题为“Python X.Y Release Schedule”的 PEP,其中 X.Y 是尚未公开发布的版本。

新的开发在 python-dev 邮件列表上讨论。

提议对 Python 进行不兼容的更改是否合理?

一般而言,不合理。世界各地已经有数百万行 Python 代码,因此对语言的任何更改都会使现有程序中的一小部分失效,这必须受到谴责。即使您可以提供转换程序,仍然存在更新所有文档的问题;已经有很多关于 Python 的书籍,我们不想一举使它们全部失效。

如果必须更改某个功能,则必须提供逐步升级路径。PEP 5 描述了在最大限度地减少用户中断的情况下引入向后不兼容更改所遵循的过程。

Python 是初学者学习编程的好语言吗?

是的。

让学生从 Pascal、C 或 C++ 或 Java 的子集等过程式和静态类型的语言开始仍然很常见。学生最好学习 Python 作为他们的第一语言。Python 具有非常简单且一致的语法以及一个大型的标准库,最重要的是,在初级编程课程中使用 Python 可以让学生专注于重要的编程技能,例如问题分解和数据类型设计。通过 Python,学生可以快速了解循环和过程等基本概念。他们甚至可能在第一门课程中使用用户定义的对象。

对于以前从未编程过的学生来说,使用静态类型语言似乎不自然。它提出了学生必须掌握的额外复杂性,并减慢了课程的节奏。学生们正在努力学习像计算机一样思考、分解问题、设计一致的接口和封装数据。虽然从长远来看学习使用静态类型语言很重要,但这不一定是学生第一门编程课程中要解决的最佳主题。

Python 的许多其他方面使其成为一种很好的入门语言。与 Java 一样,Python 拥有一个大型的标准库,因此可以在课程的早期为学生分配 实际用途的编程项目。作业不限于标准四功能计算器和支票平衡程序。通过使用标准库,学生可以在学习编程基础知识时获得从事实际应用程序的满足感。使用标准库还可以教学生有关代码重用的知识。PyGame 等第三方模块也有助于扩展学生的范围。

Python 的交互式解释器使学生能够在编程时测试语言特性。他们可以在一个窗口中运行解释器,同时在另一个窗口中输入程序的源代码。如果他们不记得列表的方法,他们可以执行类似这样的操作

>>> L = []
>>> dir(L) 
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
'__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
'__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
'reverse', 'sort']
>>> [d for d in dir(L) if '__' not in d]
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

>>> help(L.append)
Help on built-in function append:

append(...)
    L.append(object) -> None -- append object to end

>>> L.append(1)
>>> L
[1]

使用解释器,文档在学生编程时永远不会遥远。

Python 也有一些优秀的集成开发环境 (IDE)。IDLE 是一个跨平台的 Python IDE,它使用 Tkinter 用 Python 编写。Emacs 用户会很高兴知道 Emacs 有一个非常好的 Python 模式。所有这些编程环境都提供语法高亮、自动缩进,以及在编码时访问交互式解释器的功能。请参考Python wiki,获取完整的 Python 编辑环境列表。

如果您想讨论 Python 在教育中的应用,您可能有兴趣加入edu-sig 邮件列表