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 feed。

您还可以通过 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 时,他也在阅读 20 世纪 70 年代 BBC 喜剧系列 “蒙提·派森的飞行马戏团” 的已发表剧本。Van Rossum 认为他需要一个简短、独特且略带神秘的名字,所以他决定将该语言命名为 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 完成的重大项目?

请参阅 https://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 邮件列表