Python 常见问题解答 — Python 文档

来自菜鸟教程
Python/docs/2.7/faq/general
跳转至:导航、​搜索

一般 Python 常见问题解答

一般信息

什么是 Python?

Python 是一种解释型、交互式、面向对象的编程语言。 它结合了模块、异常、动态类型、非常高级的动态数据类型和类。 Python 结合了非凡的功能和非常清晰的语法。 它具有许多系统调用和库以及各种窗口系统的接口,并且可以在 C 或 C++ 中进行扩展。 它还可以用作需要可编程接口的应用程序的扩展语言。 最后,Python 是可移植的:它可以在许多 Unix 变体、Mac 以及 MS-DOS、Windows、Windows NT 和 OS/2 下的 PC 上运行。

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


什么是 Python 软件基金会?

Python 软件基金会是一个独立的非盈利组织,拥有 Python 2.1 及更新版本的版权。 PSF 的使命是推进与 Python 编程语言相关的开源技术并宣传 Python 的使用。 PSF 的主页位于 https://www.python.org/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 系统调用的脚本语言将满足需求。 我意识到编写特定于变形虫的语言是愚蠢的,所以我决定我需要一种通常可扩展的语言。

1989 年的圣诞假期,我手头有很多时间,所以我决定试一试。 在接下来的一年里,虽然我大部分时间都在做这件事,但在 Amoeba 项目中使用 Python 并取得了越来越大的成功,同事的反馈让我添加了许多早期的改进。

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


Python 有什么用?

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

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


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

Python 版本编号为 ABC 或 AB A 是主要版本号——它只在语言发生真正重大变化时才会增加。 B 是次要版本号,递增以减少惊天动地的变化。 C 是微观级别——它随着每个错误修复版本的发布而增加。 有关错误修复版本的更多信息,请参阅 PEP 6

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

Alpha、Beta 和候选发布版本有一个额外的后缀。 alpha 版本的后缀是“aN”,代表一些小的数字 N,beta 版本的后缀是“bN”,代表一些小的数字 N,发布候选版本的后缀是“cN”,代表一些小的数字 N。 换句话说,所有标记为 2.0aN 的版本都在标记为 2.0bN 的版本之前,后者在标记为 2.0cN 的版本之前,而 那些 在 2.0 之前。

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

另请参阅 sys.versionsys.hexversionsys.version_info 的文档。


如何获取 Python 源代码的副本?

最新的 Python 源代码发行版始终可从 python.org 获得,位于 https://www.python.org/downloads/。 最新开发源码可在https://github.com/python/cpython/获取。

源代码分发是一个 gzipped tar 文件,其中包含完整的 C 源代码、Sphinx 格式的文档、Python 库模块、示例程序和几个有用的可自由分发的软件。 源代码将在大多数 UNIX 平台上编译并运行。

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


如何获取有关 Python 的文档?

当前稳定版 Python 的标准文档可从 https://docs.python.org/3/ 获得。 PDF、纯文本和可下载的 HTML 版本也可从 https://docs.python.org/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.python.org/community/lists/。


如何获得 Python 的 beta 测试版本?

Alpha 和 Beta 版本可从 https://www.python.org/downloads/ 获得。 所有版本都在 comp.lang.python 和 comp.lang.python.announce 新闻组以及 Python 主页 https://www.python.org/ 上公布; 新闻的RSS提要可用。

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


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

要报告错误或提交补丁,请使用 https://bugs.python.org/ 上的 Roundup 安装。

您必须有一个 Roundup 帐户才能报告错误; 这使我们可以在有后续问题时与您联系。 它还将使 Roundup 能够在我们对您的错误采取行动时向您发送更新。 如果您之前使用 SourceForge 向 Python 报告错误,您可以通过 Roundup 的 密码重置程序 获取您的 Roundup 密码。

有关如何开发 Python 的更多信息,请参阅 Python 开发人员指南


有没有我可以参考的关于 Python 的已发表文章?

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

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

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


有关于 Python 的书籍吗?

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

您还可以在网上书店搜索“Python”并过滤掉 Monty Python 的参考资料; 或者搜索“Python”和“语言”。


www.python.org 位于世界何处?

Python 项目的基础设施遍布全球,由 Python 基础设施团队管理。 详情 此处


为什么叫Python?

当他开始实施 Python 时,Guido van Rossum 还在阅读 “Monty Python's Flying Circus” 中已发布的脚本,这是 1970 年代的 BBC 喜剧系列。 Van Rossum 认为他需要一个简短、独特且略显神秘的名称,因此他决定将语言称为 Python。


我必须喜欢“巨蟒的飞行马戏团”吗?

不,但它有帮助。 :)


现实世界中的 Python

Python有多稳定?

很稳定。 自 1991 年以来,大约每 6 到 18 个月就会发布新的稳定版本,而且这种情况似乎还会继续下去。 目前,主要版本之间通常有大约 18 个月的时间间隔。

开发人员发布旧版本的“错误修复”版本,因此现有版本的稳定性逐渐提高。 修正版本,由版本号的第三个组成部分表示(例如 3.5.3, 3.6.2),进行稳定性管理; 错误修复版本中仅包含对已知问题的修复,并且可以保证在一系列错误修复版本中接口将保持不变。

最新的稳定版本总是可以在 Python 下载页面 上找到。 Python 有两个生产就绪版本:2.x 和 3.x。 推荐的版本是 3.x,它被大多数广泛使用的库支持。 虽然2.x还在广泛使用,但【X35X】2020年1月1日之后不再维护【X86X】。


有多少人在使用 Python?

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

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

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


有没有用 Python 完成的重要项目?

有关使用 Python 的项目列表,请参阅 https://www.python.org/about/success。 查阅 过去的 Python 会议 的会议记录将发现许多不同公司和组织的贡献。

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


未来 Python 有哪些新的发展?

有关 Python 增强建议 (PEP),请参阅 https://www.python.org/dev/peps/。 PEP 是描述 Python 建议新功能的设计文档,提供简明的技术规范和基本原理。 查找标题为“Python XY Release Schedule”的 PEP,其中 XY 是尚未公开发布的版本。

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__',
'__delslice__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__getslice__', '__gt__',
'__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__',
'__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
'__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__',
'__subclasshook__', 'append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']
>>> help(L.append)
Help on built-in function append:

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

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

有了解释器,学生在编程时就不会远离文档。

Python 也有很好的 IDE。 IDLE 是 Python 的跨平台 IDE,使用 Tkinter 用 Python 编写。 PythonWin 是 Windows 特定的 IDE。 Emacs 用户会很高兴知道 Emacs 有一个非常好的 Python 模式。 所有这些编程环境都提供语法突出显示、自动缩进和在编码时访问交互式解释器。 有关 Python 编辑环境的完整列表,请参阅 Python wiki

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


升级 Python

我的应用程序一直在抱怨这个 bsddb185 模块是什么?

从 Python2.3 开始,发行版包括 PyBSDDB 包作为旧 bsddb 模块的替代品。 它包括在 API 级别提供向后兼容性的函数,但需要底层 Berkeley DB 库的更新版本。 使用旧的 bsddb 模块创建的文件不能直接使用新模块打开。

使用旧版本的 Python 和作为 Python 2.3 一部分的一对脚本(db2pickle.py 和 pickle2db.py,在 Tools/scripts 目录中),您可以将旧数据库文件转换为新格式。 使用旧的 Python 版本,运行 db2pickle.py 脚本将其转换为 pickle,例如:

python2.2 <pathto>/db2pickley.py database.db database.pck

重命名您的数据库文件:

mv database.db olddatabase.db

现在将pickle文件转换为新格式的数据库:

python <pathto>/pickle2db.py database.db database.pck

您使用的精确命令将根据您的安装细节而有所不同。 有关这两个脚本操作的完整详细信息,请检查每个脚本开头的文档字符串。