logo资料库

Python Language Reference3.4.3-中文翻译.pdf

第1页 / 共137页
第2页 / 共137页
第3页 / 共137页
第4页 / 共137页
第5页 / 共137页
第6页 / 共137页
第7页 / 共137页
第8页 / 共137页
资料共137页,剩余部分请下载后查看
前言
目录
第 1 章 介绍
替代实现
记法
第 2 章 词法分析
行结构
逻辑行
物理行
注释
编码声明
显式行连接
隐式行连接
空行
缩进
符号间的空白
其他语言符号
标识符及关键字
关键字
保留的标识符类型
文本
字符串文本及字节文本
字符串的连接
数字文本
整型文本
浮点型文本
虚数文本
运算符
分隔符
第 3 章 数据模型
对象,值和类型
标准类型层次
特殊方法名
基本定制
定制属性访问
实现描述符
调用描述符
__slots__
使用__*slots*__ 注意事项
自定义创建类
定义适当的元类
类命名空间准备
执行类主体
创建类对象
元类实例
自定义实例和子类检查
模拟包装类型
模拟包装器类型
模拟数值类型
with 语句的上下文管理器
特殊方法查找
第 4 章 执行模型
命名空间和代码块
动态交互功能
异常
第 5 章 导入系统
导入库
常规包
命名空间包
搜索
模块缓存
查找器和加载器
导入钩子程序
元路径
加载过程
加载器
模块分支
导入关联模块属性
module.__path__
模块 reprs
基于路径的查找器
路径入口查找器
路径入口查找器协议
代替标准导入系统
__main__
__main__.__spec__
开放式问题
参考
第 6 章 表达式
数值间的转换
原子
标识符(名字)
字面值
括号表达式
列表、集合和字典的表示
列表的表示
集合的表示
字典的表示
生成器表达式
Yield 表达式
生成器-迭代器方法
举例
基元
属性引用
下标
片段
调用
幂运算符
一元算术运算符和位运算符
二元算术运算符
移位运算符
二元位运算符
比较运算符
布尔运算
条件表达式
lambda 表达式
表达式表
计算顺序
运算符优先级
第 7 章 简单语句
表达式语句
赋值语句
增量的赋值语句
assert 语句
pass 语句
del 语句
return 语句
yield 语句
raise 语句
break 语句
continue 语句
import 语句
future 语句
global 语法
nonlocal 语句
第 8 章 复合语句
if 语句
while 语句
for 语句
try 语句
with 语句
函数定义
类定义
第 9 章 顶层组件
完整的 Python 程序
文件输入
交互式输入
表达式输入
第 10 章 完整的语法规范
前言前言 本手册翻译自 Python 官方发行的 《Python Language Reference》 (https://docs.python.org/3/referenc e/index.html) ,适用于 Python 3.4.3 版本。 Python 是一种解释性的、面向对象的、具有动态语义的高级程序设计语言。它内建高级数据结构,配以动态类型 和动态捆绑,使其在快速应用开发中非常有利,就像脚本或粘合语言一样将已存在的构件连接在一起。Python 的 简单性和句法的易学性使其代码具有优秀的可读牲,因此维护程序的成本得以大大降低。Python 具有模块和包的 概念,以支持程序的模块化和代码重用。在主流平台上,Python 的解释器和大量标准库都可以免费地以源代码形 式或可执行文件形式获得,并且可以自由发布。 本参考手册描述了该语言的语法和“核心语义”。手册本身是比较简洁的,但尽可能写得准确和完 整。那些非基 本的内置对象类型、内置函数和模块的语义在《Python Standard Library》 (https://docs.python.org/3/librar y/index.html#library-index) 中进行描述。对于语言的浅显介绍,可以看看《The Python Tutorial》 (http s://docs.python.org/3/tutorial/index.html#tutorial-index) 。对于 C 和 C++ 程序员, 有两个文档可供参考: • 《 Extending and Embedding the Python Interpreter》 (https://docs.python.org/3/extending/inde x.html#extending-index) ,是对 Python 扩展模块设计的总体介绍, • 《 Python/C API Reference Manual》 (https://docs.python.org/3/c-api/index.html#c-api-index) ,则向 C/C++ 程序员们细致地描述了可以使用的接口。 > Python Language Reference 官网:https://docs.python.org/3/reference/index.html 更新日期更新日期 2015-04-09 更新内容更新内容 第一版发布 (Python V3.4.3)
目录目录 前言前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 第 1 章第 1 章 介绍介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 第 2 章第 2 章 词法分析词法分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 第 3 章第 3 章 数据模型数据模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2020 第 4 章第 4 章 执行模型执行模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5353 第 5 章第 5 章 导入系统导入系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5757 第 6 章第 6 章 表达式表达式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7676 第 7 章第 7 章 简单语句简单语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100100 第 8 章第 8 章 复合语句复合语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115115 第 9 章第 9 章 顶层组件顶层组件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128128 第 10 章第 10 章 完整的语法规范 完整的语法规范 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131131
11 介绍介绍
第 1 章 介绍 | 4 本参考手册描述了Python编程语言,不能替代入门教程。 虽然我尝试尽可能的精确,除了语法和词法分析之外,仍然选择使用英语而不是形式化的规范的来描述。这应该 使文档更具可读性,但可能存在歧义。因此,如果你来自火星,仅从这个文档试图重新实现Python,您可能需要 猜一些东西,事实上你可能会最终实施一门不同的语言。另一方面,如果您正在使用Python,想了解某些细节精 确的语言规则,你应该可以在这里找到他们。如果你想看到一个更正式的语言定义,也许你自己搞了,或者发明 一个克隆机:-)。 添加太多的实现细节到语言的参考文档中是危险的事情 — 实现可能会改变,并且同一语言的不同实现可能以不同 方式工作。另一方面,CPython是广泛使用的一个Python实现(虽然替代实现继续得到支持),这里有些细节 还是被提及了, 特别是某种实现增加了限制时, 因此你可以在本文档中找到“实现注意”的标记。 每个Python实现都提供了大量的内建和标准模块,他们被记录在Python Standard Libray (https://docs.pytho n.org/3/library/index.html#library-index) 中。一些与语言定义密切相关的内建模块也在这里被介绍了。 替代实现替代实现 虽然这是迄今为止最受欢迎的Python实现,不同的Python爱好者对一些替代的实现有特别感兴趣。 已知实现包括: CPython 这是Python的原始和被维护最多的实现,用c语言编写,新的语言特性通常首先出现在这里。 Jython Python的Java实现。这个实现可以作为Java应用程序的脚本语言,或可用于创建使用Java类库的应用。他也经 常被用于创建Java库的测试。更多的信息可以在Jython的网站 (http://www.jython.org/) 上找到。 Python for .NET 这个实际上使用了CPython的实现,但它是一个托管的.NET应用程序,作为.NET库提供。由Brian Lloyd创 建,更多信息见Python for .NET主页 (http://pythonnet.sourceforge.net/) 。 IronPython 另一个.NET实现的Python,与Python.NET不同,这是一个完整的Python实现,生成IL,并直接编译Python 代码到.NET程序集。由Jython的原作者Jim Hugunin创建。更多信息见IronPython网站 (http://ironpython.ne t/) PyPy 完全用Python实现的Python。他支持在其他实现里没有的几个高级功能,像支持无堆栈和即时编译。该项目的
第 1 章 介绍 | 5 目标之一是鼓励实验与语言本身,使其更轻松地修改该解释器 (因为它是用Python写的),PyPy 项目主页 (htt p://pypy.org/) 上可用的其他信息。 每种实现在某种程度上的变化,从本手册记录的语言,或者介绍具体信息以外的标准Python文档。请参考详细的 实现文档,以确定在使用的实现中还有什么是你想了解的。 记法记法 在描述词法和句法分析时候, 我们使用不甚严格的BNF, 通常是以下的定义方式: name ::= lc_ letter (https://docs.python.org/3/reference/introduction.html#grammar-token-lc_letter) (l c_ letter (https://docs.python.org/3/reference/introduction.html#grammar-token-lc_letter) | "_ ")* lc_letter ::= "a"..."z" 第一行说明 name 为 lc_letter 后跟随零个以上(包括零个) lc_letter 或下划线的序列。 lc_letter 是” a ”至” z ”中任意一个字符.(实际上, 这个” name ”的定义贯穿于本文档的整个词法和语法规则中) 每个规则以一个名字(为所定义的规则的名字)和一个冒号" ::= "为开始. 竖线( | )用于分隔可选项.这是记法中结合 性最弱的符号.星号( * )意味着前一项的零次或多次的重复; 同样, 加号( + )意味着一次或多次的重复. 在方括 号( [] )中的内容意味着它可以出现零次或一次(也就是说它是可选的).星号" * "和加号" + "与前面的项尽可能地紧 密的结合, 小括号用于分组.字符串的字面值用引号括住.空白字符仅仅在分隔语言符号(token)时有用.通常规则被 包含在一行之中, 有很多可选项的规则可能会被格式化成多行的形式, 后续行都以一个竖线开始。 在词法定义中(如上例), 有两个习惯比较常用:以三个句点分隔的一对串字面值意味着在给定(包括) 的ASCII字 符范围内任选一个字符。在尖括号( <...> )中的短语给出了非正式的说明, 例如, 这用在了需要说 明”控制字 符”记法的时候。 即使在句法和词法定义中使用的记法几乎相同, 但它们之间在含义上还是有着的很大不同: 词法定义是 在输入源 的一个个字符上进行操作,而句法定义是在由词法分析所生成的语言符号流上进行操作。在下 节(”词法分 析”)中使用的BNF都是词法定义, 以后的章节是句法定义。
22 词法分析词法分析
第 2 章 词法分析 | 7 一个 Python 程序是由一个解析器读取的。解析器的输入是一个由词法分析器生成的符号流。本章介绍了词法分 析器如何将文件分解为符号。 Python 将程序文本以 Unicode 代码点的方式读入;源文件的编码格式由编码声明给出,其默认值为 UTF-8 ,详见 PEP 3120 (http://www.python.org/dev/peps/pep-3120) 。源文件无法被解析时,会引发 SyntaxErr or (https://docs.python.org/3/library/exceptions.html#SyntaxError) 异常。 行结构行结构 一个 Python 程序会被分成多个逻辑行。 逻辑行逻辑行 逻辑行使用一个 NEWLINE 标记结尾。除非在语法中允许使用 NEWLINE (例如,复合语句中的声明语句之 间),否则声明语句不能跨多个逻辑行。逻辑行是由一个物理行,或多个通过显示或隐式行连接规则连接在一起的 物理行组成。 物理行物理行 物理行是一个以行尾序列结尾的字符序列。在源文件中,任何平台下标准的行终止序列都可以使用-在 Unix 平台 上使用 ASCII LF(换行)符,在 Windows 平台上使用 ASCII 字符序列CR LF(回车加换行),在老版本的 Macint osh 平台上使用 ASCII CR(回车)符。无论使用什么平台,所有这些形式都可以使用。 使用嵌入式Python开发时,需要使用标准 C 语言约定的换行符将源代码传递给 Python API(字符 \n 表示 ASC II LF,即行终止符)。 注释注释 注释以( # )字符开始(且此时该符号不是当前字符串的一部分),以该物理行的结尾为结束。如果没有调用隐式行 连接,那么注释即意味着逻辑行的结尾。注释会被语法分析所忽视,它们不会被作为程序代码处理。 编码声明编码声明 如果第一或第二行的 Python 脚本注释能够匹配正则表达式 coding[=:]\s*([-\w.]+) ,该注释会被当做编码声明处 理;该表达式的第一部分定义了源代码文件的编码格式。此表达式的推荐形式是 # -*- coding: -*-
分享到:
收藏