Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型、高级和通用的编程语言。Python支持多种编程范型,包括函数式、指令式、结构化、面向对象和反射式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。

Python由吉多·范罗苏姆创造,第一版发布于1991年,它是ABC语言的后继者,也可以视之为一种使用传统中缀表达式的LISP方言。

Python的设计哲学强调代码的可读性和简洁的语法,尤其是使用空格缩进划分代码块。相比于C或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。

Python解释器本身几乎可以在所有的操作系统中运行。Python的官方解释器CPython是用C语言编写的,它是一个由社区驱动的自由软件,目前由Python软件基金会管理。

历史

Python的创始人为吉多·范罗苏姆,当时他在阿姆斯特丹的荷兰数学和计算机科学研究学会工作。1989年的圣诞节期间,吉多·范罗苏姆为了在打发时间,决心开发一个新的脚本解释编程,作为ABC语言的一种继承,替代使用Unix shell和C语言进行系统管理,担负同Amoeba操作系统的交互和异常处理。之所以选中Python作为编程的名字,是因为他是BBC电视剧——《蒙提·派森的飞行马戏团》(Monty Python’s Flying Circus)的爱好者。范罗苏姆作为Python的主要开发者独自担负这个项目的职责,直到2018年7月12日,他宣布从作为终身仁慈独裁者(BDFL)的职责上“永久休假”,Python社区向他授予这个头衔反映了他长期担任整个Python语言的发展方向的决策者。他在2019年1月至11月于参与了一个五人掌控委员会继续领导项目发展。

在1991年2月,范罗苏姆发布了最初代码(标记为版本0.9.0)于alt.sources,这时就已经存在了带继承的类、异常处理、函数和核心数据类型list、dict、str等。在这个最初发行中就有了从Modula-3引进的模块系统,它的异常模型也类似于Modula-3,但增加了else子句。在1994年1月Python达到了版本1.0。这个发行版主要新特征是包括了Amrit Prem提供的函数式编程工具lambda、map、filter和reduce。Python 1.4增加了受Modula-3启发的关键字参数和对复数的内建支持,还包含采取名字修饰的一种基本形式的数据隐藏。

Python 2.0于2000年10月16日发布,介入了列表推导式,这是从函数式编程语言SETL和Haskell中引入的。它还向垃圾收集系统增加了环检测算法,并且支持Unicode。Python 2.1支持了嵌套作用域,就像其他静态作用域语言一样。Python 2.2的重大革新是将Python的类型(用C写成)和类(用Python写成)统一入一个层级,使得Python的对象模型成为纯粹和一致的面向对象的模型;还增加了迭代器,受CLU和Icon启发的生成器,和描述器协议。Python 2.4加入了集合数据类型,和函数修饰器。Python 2.5加入了with语句。

Python 3.0于2008年12月3日发布,它对语言做了较大修订而不能完全后向兼容。Python 3发行包括了2to3实用工具,它(至少部分的)自动将Python 2代码转换成Python 3代码。Python 3的很多新特性后来也被移植到旧的Python 2.6/2.7版本中。

Python 2.7的产品寿命结束日期最初设定为2015年,出于对大量的现存代码不能前向移植到Python 3的关切而延期至2020年。随着Python 2的产品寿命结束,只有Python 3.9和后续版本正在被完全支持,但仍提供对3.6、3.7和3.8版本的安全性修正。

在2020年12月,活跃的Python核心开发者选举Barry Warsaw、Brett Cannon、Carol Willing、Pablo Galindo Salgado和Thomas Wouters为2021年度“掌控委员会”的五位成员来领导这个项目。

特征和设计哲学

Python是多范型编程语言。它完全支持结构化编程和面向对象编程,还有很多特征支持函数式编程和元编程包括元类元对象(魔术方法)。通过扩展还可以支持很多范型,包括面向切面编程、契约式设计和逻辑编程。

Python使用动态类型,在内存管理上采用引用计数和环检测相结合的垃圾收集器。它的特征还有动态名字解析(后期绑定),即在程序执行期间绑定方法和变量的名字。

Python对遵循LISP传统的函数式编程提供了有限的支持,它提供了 map、filter和reduce函数;列表推导式、字典、集合和生成器表达式。标准库中的模块functools和itertools,实现了从Haskell和Standard ML借鉴来的函数式工具。

Python的设计哲学是“优雅”、“明确”、“简单”。它的重要准则被称为“Python之禅”。在Python解释器内运行import this可以获得完整的列表,下面是其中首要:

  • 优美优于丑陋。明了优于隐晦。
  • 简单优于复杂。复杂优于凌乱。
  • 扁平优于嵌套。稀疏优于稠密。
  • 可读性很重要。

Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,显著不同于拥有“不止一种方法去做一件事”风格的语言例如Perl。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。

范罗苏姆认为ABC语言非常优美和强大,并没有成功的原因是非开放造成的,故而将Python本身设计为可扩展的。Python并不把所有的特性和功能都集成到语言核心,而是提供了丰富的API和工具,以便程序员能够轻松地使用C、Cython来编写扩展模块,因此很多人使用Python将其他语言编写的编程进行集成和封装。Python编译器本身也可以被集成到其它需要脚本语言的编程内。

Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python的官方实现CPython中。在某些对运行速度要求很高的情况,Python设计师可以使用JIT技术的PyPy,或者是将Python脚本翻译成C的Cython,还可以将时间关键的函数迁移至用C语言编写的扩展模块中。

语法

缩进

Python语言利用缩进表示语句块的开始和结束(越位规则),而非使用大括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的结束。根据PEP 8的规定,使用4个空格来表示每级缩进。

使用Tab字符和其它数目的空格虽然都可以被解释器识别,但不符合编码规范,偏向使用Tab字符的程序员可以设置文本编辑器将Tab键转换为4个空格。缩进成为了语法的一部分,并且Python开发者有意让违反了“缩进规则”的程序不能通过解释。

关键字

Python有如下35个关键字或“保留字”;它们不能用作标识符:

  • and
  • as
  • assert
  • async
  • await
  • break
  • class
  • continue
  • def
  • del
  • elif
  • else
  • except
  • False
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • None
  • nonlocal
  • not
  • or
  • pass
  • raise
  • return
  • True
  • try
  • while
  • with
  • yield

    从Python 3.5开始,介入了async和await。 从Python 3开始,介入了关键字True、False和nonlocal。