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。