第一章 介绍

本参考手册描述 Python 编程语言,但它不打算作为教程。

尽管我想写得尽可能准确,但我还是选择用英语而不是正式的规范语言来写语法和词法分析以外的所有内容。这将使本文对普通读者来说更容易理解,但也为含糊其辞埋下了伏笔。因此,如果您来自火星,并试图单纯根据本文来重新实现 Python,您可能不得不多加猜测,事实上,您最终很可能会实现一种完全不同的语言。另一方面,如果您正在使用 Python,并且想知道语言特定部分的确切规则是什么,那么您一定可以在这里找到它们。如果您想看到更正式的语言定义,也许可以把您的时间贡献出来——或者去发明一种克隆机器 :-)。

将太多实现细节添加到语言参考文档中是危险的——实现可能会改变,而语言的其他实现也可能会有所不同。另一方面,CPython 是被广泛使用的 Python 实现 (虽然可选实现继续获得支持),有时它的特殊怪癖值得一提,特别是在它强加了某些额外限制的时候。因此,您将在本文各处找到简短的“实现说明”。

每个 Python 实现都附带了许多内置和标准模块。它们被收录在 Python 标准库中。本文偶尔会提及少量对语言定义有重大影响的内置模块。

1.1 可选实现

尽管有一种迄今为止最流行的 Python 实现 ,但此外还有一些对某些人而言特别感兴趣的实现。

已知的实现包括:

CPython

        这是最早和支持最好的 Python 实现,用 C 写成。新的语言功能通常首先在此出现。

JPython

        Java 中的 Python 实现。此实现可以用作 Java 应用程序的脚本语言,也可用于创建使用 Java 类库的应用程序。它通常还用于为 Java 创建测试。更多信息可以在 Jython 网站找到。

Python for .NET

        这一实现实际上使用了 CPython 实现,但它是一个托管的 .NET 应用程序,而且可以使用 .NET 库。它由 Brian Lloyd 创建。更多信息请参阅 Python for .NET 主页。

IronPython

        另一个可选的 Python for .NET。与 Python for .NET 不同,这是一个完整的 Python 实现,它生成 IL ,并将 Python 语言直接编译为 .NET 程序集。它是由 Jython 最初的创建者 Jim Hugunin 所创建的。有关详细信息,请参阅 IronPython 网站。

PyPy

        一个完全用 Python 编写的 Python 实现。它支持几个其他实现中没有的高级特性,例如 stackless 支持和 JIT  编译程序。该项目的目标之一是通过简化解释程序 (因为它是用 Python 编写的) 来鼓励对语言本身进行实验。其他信息可以从 PyPy 项目主页获得。

        这些实现在某种程度上与本手册所述的语言有所不同,或者引入了标准 Python 文档所涵盖内容以外的特定信息。请参阅特定于实现的文档,以确定您所使用的特定实现还需了解哪些内容。

1.2 表示法

对词法分析和语法的描述使用修改后的 BNF 语法表示法。它使用以下定义风格:

name ::= lc_letter (lc_letter | "_")*

lc_letter ::= "a"..."z"

第一行表示 name 是以 lc_letter 开头,后跟零个或多个 lc_letters 和下划线的序列。而 lc_letter 则是“a”到“z”之间的任意单个字符。(此规则实际上遵循了本文词法和语法规则中对名字的定义。)

每条规则以名字 (该规则定义的名字) 和 ::= 开头。竖线 (|) 用于分隔可选项;它是此表示法中的最小绑定操作符。星号 (*) 表示前一项的零次或多次重复;同样,加号 (+) 表示一次或多次重复,而中括号 ([]) 中的短语意味着出现零或一次 (换言之,所包含的短语是可选的)。* 和 + 操作符尽最大可能紧密绑定;括号用于分组。字符串字面值用引号括起。空白只对分隔标记有意义。规则通常包含在单行中 ;有多个可选项的规则可以被格式化为多行,每行都从一条竖线开始。

在词法定义 (如上例) 中,还使用两个进一步的约定:用三个点分隔的两个字面值字符意味着在给定 (包含) 的 ASCII 字符范围内选择任意单个字符。尖括号 (<...>) 之间的短语为定义的符号给出非正式描述;例如,它可以在需要时用来描述“控制字符”的概念。

尽管使用的表示法几乎相同,但词法和语法定义的含义有很大区别:词法定义在输入源的单个字符上进行操作,而语法定义则在词法分析生成的标记流上进行操作。在下一章 (“词法分析”) 中,所有 BNF 的用法都是词法定义;后面章节中的用法都是语法定义。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,825评论 6 546
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,814评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,980评论 0 384
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 64,064评论 1 319
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,779评论 6 414
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,109评论 1 330
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,099评论 3 450
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,287评论 0 291
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,799评论 1 338
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,515评论 3 361
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,750评论 1 375
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,221评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,933评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,327评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,667评论 1 296
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,492评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,703评论 2 380

推荐阅读更多精彩内容