Python语言参考-简介

简介

本参考手册描述了Python语言,它本意并不是一篇教程。

尽管我努力做到尽可能的精确,除了语法和词法分析外我都用英语而不是标准的规范来阐述。这样应该让这篇文档对于普通读者来说更易读,但可能会产生歧义。所以,如果你来自火星,想通过此文档重新实现Python,你可能需要猜测一些东西或者实际上你最终可能实现一种完全不同的语言。另一方面,如果你使用Python,想了解这门语言一个特定方面的准确定义,你应该能从这里找到。如果你想搞明白这门语言更正式的定义,你可能需要奉献你的时间或者发明一台克隆机器。

在语言的参考手册里加入太多实现细节是非常危险的---|实现可能会变,同一语言的不同实现可能运行的完全不同。另一方面,目前广泛使用的只有一种Python实现(尽管存在其他实现),而且其特殊的模式值得一提特别是实现强加了一些限制。因此,你会看到一些“实现要点”散落于文档中。

每种Python实现都有很多其自己的内置模块,这些在Ptyhon标准模块中有说明。一些和语言的定义有重大关系的内置模块会被提及。

替代品

尽管目前最流行的Python实现只有一种,但有一些其他人感兴趣的替代品。

已知的实现包括:

  • Cpython 这是最初也是维护最好的Python实现,以C语言编写,新特性通常先出现在这里。
  • Jython Java语言实现,这个版本可用于Java程序的脚本语言,或者用来借助Java类库创建Java程序。也可以用它给Java类写测试程序。更多信息可以访问Jython主页。
  • Python for .NET 此版本使用Cpython实现,但是一个受管理的应用,它让.NET类可供使用。出自Brian Lloyd之手,更多信息访问Python for .NET主页
  • IronPython Python for .NET的替代品,他是可以生成IL的完整Python实现,直接将Python代码编译为.NET集合。由Jim Hugunin,Jython创始人开发,跟多信息参考IronPython主页
  • PyPy 完全用Python实现,它支持一些其他版本中没有的特性,如stackless支持和Justin Time编译器。项目的目标是通过语言自身来更容易地修改解释器(因为用Python编写),更多信息参考PyPy主页。

每种实现都此文档描述的语言或多或少有些出入,或者引入了些标准文档中没有的信息。请参考特定实现的文档来看看你需要额外了解什么。

范式

语法和词法分析的描述使用了一种修改过的BNF语法范式。就是下面这种风格的定义:

name      ::=  lc_letter (lc_letter | "_")*
lc_letter ::=  "a"..."z"

第一行的意思是name是由一个lc_letter后跟零个或者多个lc_letter和下划线。一个lc_letter是a到z任意一个字符(这个规则实际上描述了此文档中语法和词法中定义的名称)。

每个规则以一个名字(正是规则定义的名称)和::=开头。竖线用于分割多个可选值;这是此范式中最基本的绑定操作。表示前面字符的零次或多次重复;类似的+表示一个或者多个重复;包含在[]中的字符表示出现零次或者一次(换句话说就是可选的)。和+紧密结合;()用于分组。字符串用引号引起来。空格仅用作分隔标记。正常情况规则都写在一行,有多个可选值的规则可以以竖线开头写再多行里。

在词法定义中,有两种约定:两个以三个点分割的字符意思是介于两者间的任意字符;尖括号中的短语给予要表示的字符以说明信息,例如用来表示控制符。

尽管使用的范式几乎一样,但词法和语法的定义有很大不同:词法定义操作输入的单个字符上,而语法定义操作由词法分析产生的标记流上。下一章所有的BNF使用都是词法定义;接下来的章节中使用的都是语法定义。

Show Comments