Python 常見問答

一般資訊

什麼是 Python?

Python 是一種直譯式、互動式、面向物件的程式設計語言。它包含模組、異常、動態類型、非常高級的動態資料類型和類別。它支援面向物件程式設計之外的多種程式設計範式,例如程序式和函數式程式設計。Python 結合了非凡的效能和非常清晰的語法。它具有與許多系統呼叫和庫的介面,以及各種視窗系統,並且可以用 C 或 C++ 擴展。它也可以用作需要可程式設計介面的應用程式的擴展語言。最後,Python 是可移植的:它可以在許多 Unix 變體(包括 Linux 和 macOS)以及 Windows 上執行。

要了解更多資訊,請從 Python 教學 開始。 Python 初學者指南 連結到其他介紹性教學和學習 Python 的資源。

什麼是 Python 軟體基金會?

Python 軟體基金會是一個獨立的非營利組織,擁有 Python 2.1 及更高版本的版權。PSF 的使命是推動與 Python 程式設計語言相關的開源技術,並宣傳 Python 的使用。PSF 的主頁位於 https://www.pythonlang.cn/psf/

對 PSF 的捐款在美国是免稅的。如果您使用 Python 並發現它很有用,請通過 PSF 捐贈頁面 捐款。

为什么 Python 最初被创建?

以下是 Guido van Rossum 撰写的关于 Python 起源的非常简短的总结。

我在 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://www.pythonlang.cn/downloads/。最新的开发源代码可从 https://github.com/python/cpython/ 获取。

源代码分发包是一个 gzip 压缩的 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 中找到,这是一个流量较低的审核列表,每天收到大约 5 条帖子。它可作为 python-announce 邮件列表 获取。

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

如何获取 Python 的测试版?

Alpha 和 beta 版本可从 https://www.pythonlang.cn/downloads/ 获取。所有版本都会在 comp.lang.python 和 comp.lang.python.announce 新闻组以及 Python 主页 https://www.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 季刊,第 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 时,他也在阅读 “蒙提·派森的飞行马戏团” 的已发表剧本,这是一部 1970 年代的 BBC 喜剧系列。Van Rossum 认为他需要一个简短、独特且略带神秘的名字,因此他决定将这种语言命名为 Python。

我必须喜欢“蒙提·派森的飞行马戏团”吗?

不,但它有帮助。:)

现实世界中的 Python

Python 的稳定性如何?

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

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

最新的稳定版本始终可以在 Python 下载页面 上找到。Python 有两个生产就绪版本:2.x 和 3.x。推荐使用 3.x 版本,它得到大多数广泛使用的库的支持。虽然 2.x 仍然被广泛使用,但 它不再维护

有多少人在使用 Python?

可能数百万用户,尽管很难获得准确的统计数据。

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

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

Python 是否完成过任何重大项目?

请参阅 https://www.pythonlang.cn/about/success,了解使用 Python 的项目列表。查阅 过去 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 发布计划”的 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 邮件列表 感兴趣。