通用 Python 常见问题解答

Contents

General Information

什么是 Python?

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

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

什么是 Python Software Foundation?

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

在美国,向 PSF 捐款是免税的。如果您使用 Python 并发现有帮助,请passPSF 捐赠页面贡献。

使用 Python 有版权限制吗?

只要您保留版权并在产生的有关 Python 的任何文档中显示这些版权,就可以对源进行任何操作。如果您遵守版权规则,则可以将 Python 用于商业用途,以源或二进制形式(经修改或未经修改)出售 Python 副本,或出售以某种形式包含 Python 的产品。当然,我们仍然想了解 Python 的所有商业用途。

请参阅PSF 许可证页面以找到更多说明,以及指向许可证全文的链接。

为什么首先创建 Python?

这是所有内容的非常简短的摘要,由 Guido van Rossum 撰写:

Note

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

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

我在 CWI 的 Amoeba 分布式 os 小组工作。我们需要一种比编写 C 程序或 Bourne Shell 脚本更好的系统 Management 方式,因为 Amoeba 有自己的系统调用接口,而从 Bourne Shell 很难访问该接口。我在变形虫中处理错误的经验使我敏锐地意识到异常作为编程语言Function的重要性。

在我看来,一种脚本语言具有 ABC 之类的语法,但可以访问 Amoeba 系统调用,可以满足需要。我意识到编写特定于变形虫的语言是愚蠢的,所以我决定我需要一种通常可以扩展的语言。

在 1989 年圣诞节假期期间,我手头上有很多时间,因此我决定try一下。在接下来的一年中,虽然我仍在自己的时间上进行大部分工作,但在 Amoeba 项目中使用了 Python,并且取得了越来越大的成功,而同事们的反馈使我增加了许多早期改进。

1991 年 2 月,经过一年多的 Developing,我决定发布到 USENET。其余的位于Misc/HISTORY文件中。

Python 有什么用?

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

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

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

Python 版本编号为 A.B.C 或 A.B。 A 是主要版本号-仅在语言的 true 重大更改时才增加。 B 是次要版本号,为减少大的改动而增加。 C 是微观级别–每个错误修正版本都会递增。有关错误修正版本的更多信息,请参见 PEP 6

并非所有版本都是错误修正版本。在发布新的主要版本之前,进行了一系列开发版本发布,分别表示为 alpha,beta 或候选版本。 Alpha 是尚未完成接口的早期版本;看到两个 Alpha 版本之间的界面变化并不奇怪。 Beta 版更加稳定,可以保留现有接口,但可能会添加新模块,并且冻结了发布候选版本,除了修复关键错误所需的更改外,不进行任何更改。

Alpha,Beta 和发行候选版本具有附加的后缀。对于一个较小的数字 N,alpha 版本的后缀为“ aN”,对于一个较小的数字 N,beta 版本的后缀为“ bN”,对于某个较小的数字 N,发布候选版本的后缀为“ cN”。换句话说,所有标有 2.0aN 的版本都在标有 2.0bN 的版本之前,后者标有 2.0cN,而那些则在 2.0 之前。

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

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

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

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

源代码分发是一个压缩的 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 教程

请咨询Starters 指南,以查找有关 StartersPython 程序员的信息,包括教程列表。

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

有一个新闻组* comp.lang.python *和一个邮件列表python-list。新闻组和邮件列表是相互连接的-如果您可以阅读新闻,则无需订阅邮件列表。 * comp.lang.python *的访问量很高,每天都会收到数百条post,而 UsenetReader 通常更能应付这一卷。

可以在 comp.lang.python.announce 中找到有关新软件版本和事件的公告,com.lang.python.announce 是流量较低的审核列表,每天接收约五篇post。可用为python-announce 邮件列表

有关其他邮件列表和新闻组的更多信息,请参见https://www.python.org/community/lists/

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

https://www.python.org/downloads/提供了 Alpha 和 Beta 版本。所有版本均在 comp.lang.python 和 comp.lang.python.announce 新闻组以及https://www.python.org/的 Python 主页上宣布。提供新闻的 RSS 提要。

您还可以pass Git 访问 Python 的开发版本。有关详情,请参见Python 开发人员指南

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

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

您必须拥有一个 Roundup 帐户才能报告错误;如果有后续问题,我们可以与您联系。它还将使 Roundup 在我们处理您的错误时向您发送更新。如果您以前使用 SourceForge 向 Python 报告错误,则可以pass Roundup 的密码重置程序获取 Roundup 密码。

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

我是否可以参考任何有关 Python 的已发表文章?

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

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

Note

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 项目的基础架构遍布 Global,并由 Python 基础架构团队 Management。详细信息here

为什么叫 Python?

刚开始实施 Python 时,Guido van Rossum 还在阅读“蒙蒂 Python 的飞行马戏团”的已发布脚本,该“蒙蒂 Python 的飞行马戏团”1 是 1970 年代的 BBC 喜剧系列。范·罗瑟姆(Van Rossum)认为他需要一个简短,独特且略带神秘的名称,因此他决定将其命名为 Python。

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

不,但是有帮助。 :)

现实世界中的 Python

Python 的稳定性如何?

非常稳定自 1991 年以来,大约每 6 到 18 个月就会发布新的稳定版本,并且这种情况可能还会持续。当前,主要版本之间通常大约有 18 个月的间隔。

开发人员发布较早版本的“错误修正”版本,因此现有版本的稳定性逐渐提高。pass版本号的第三个组件(例如 3.5.3、3.6.2)指示的 Bugfix 版本进行了稳定性 Management;一个错误修正版本仅包含针对已知问题的修复程序,并且可以确保在一系列错误修正版本中,接口将保持不变。

始终可以在Python 下载页面上找到最新的稳定版本。有两个可用于生产的 Python 版本:2.x 和 3.x。推荐的版本是 3.x,大多数广泛使用的库都支持该版本。尽管 2.x 仍被广泛使用,但2020 年 1 月 1 日之后将不再维护

有多少人在使用 Python?

尽管很难获得确切的数量,但可能有成千上万的用户。

可以免费下载 Python,因此没有销售数字,并且可以从许多不同的站点获得它,并且打包有许多 Linux 发行版,因此下载统计信息也不能说明全部。

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

用 Python 完成了哪些重要的项目?

有关使用 Python 的项目列表,请参见https://www.python.org/about/success。咨询过去的 Python 会议的程序将揭示许多不同公司和组织的贡献。

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

预计 PythonFuture 会有哪些新 Developing?

有关 Python 增强建议(PEP),请参见https://www.python.org/dev/peps/。 PEP 是设计文档,描述了建议的 Python 新Function,并提供了简洁的技术规范和基本原理。查找标题为“ Python X.Y 发布时间表”的 PEP,其中 X.Y 是尚未公开发布的版本。

python-dev 邮件列表讨论了新的 Developing。

对 Python 提出不兼容的更改是否合理?

一般来说,没有。世界各地已经有成千上万的 Python 代码行,因此对语言的任何更改都会使现有程序的一小部分无效,这是不受欢迎的。即使您可以提供转换程序,仍然存在更新所有文档的问题。已经写了许多关于 Python 的书,我们不想一口气使它们全部失效。

如果必须更改Function,则必须提供逐步升级的路径。 PEP 5介绍了引入向后不兼容的更改同时最大程度地减少对用户的干扰的过程。

Python 是入门程序员的好语言吗?

Yes.

使用程序和静态类型的语言(例如 Pascal,C 或 C 或 Java 的子集)开始学习学生仍然很常见。pass将 Python 作为第一语言,可以更好地为学生服务。 Python 具有非常简单且一致的语法和庞大的标准库,最重要的是,在开始的编程类中使用 Python 可使学生集中精力于重要的编程技能,例如问题分解和数据类型设计。使用 Python,可以快速向学生介绍循环和过程等基本概念。他们甚至可能在第一门类中就可以使用用户定义的对象。

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

Python 的许多其他方面使其成为一种很好的第一语言。像 Java 一样,Python 拥有一个大型的标准库,因此可以在类中尽早地为学生分配“做某事”的编程项目。分配不限于标准的四Function计算器和检查平衡程序。pass使用标准库,学生在学习编程的基础知识时会获得在实际应用程序上工作的满足感。使用标准库还会教给学生有关代码重用的知识。诸如 PyGame 之类的第三方模块也有助于扩大学生的学习范围。

Python 的交互式解释器使学生可以在编程时测试语言Function。当他们在另一个窗口中 Importing 程序的源代码时,他们可以保持窗口运行的解释器。如果他们不记得列表的方法,则可以执行以下操作:

>>> 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]

有了 Interpreter,文档就不会与学生编程时相距甚远。

也有适用于 Python 的优秀 IDE。 IDLE 是用于 Python 的跨平台 IDE,使用 Tkinter 用 Python 编写。 PythonWin 是 Windows 特定的 IDE。 Emacs 用户将很高兴知道 Emacs 有一个非常好的 Python 模式。所有这些编程环境都提供了语法突出显示,自动缩进以及在编码时访问交互式解释器的Function。有关 Python 编辑环境的完整列表,请咨询Python Wiki

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

Upgrading Python

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

从 Python2.3 开始,该发行版包括 PyBSDDB 软件包<>,以替代旧的 bsddb 模块。它包括在 API 级别提供向后兼容性的函数,但需要底层Berkeley DB库的较新版本。使用旧版 bsddb 模块创建的文件无法使用新模块直接打开。

使用旧版本的 Python 和 Python 2.3 中的Pair脚本(Tools/scripts 目录中的 db2pickle.py 和 pickle2db.py),可以将旧数据库文件转换为新格式。使用旧的 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

您使用的确切命令将根据安装的具体情况而有所不同。有关这两个脚本的操作的完整详细信息,请在每个脚本的开头检查 doc 字符串。