作者:empty 页数:169 出版社:empty |
本参考手册是对Python编程语言的描述。并不适宜作为教程使用.我希望尽可能地保证内容精确无误,但还是选择使用自然词句进行描述,正式的规格定义仅用于句法和词法解析.这样应该能使文档对于普通人来说更易理解,但也可能导致一些歧义。因此,如果你是来自火星并且想凭借这份文档把Python重新实现一遍, 也许有时需要自行猜测, 实际上最终人概会得到一个十分不同的语言, 面在另一方面, 如果你正在使用Python并且想了解有关该语言特定领域的精确规则, 你应该能够在这里找到它们.如果你希架查看对该语言更正式的定义,也许你可以花些时间自己写上一份一或者发明一台克隆机器:-)在语言参考文档里加入过多的实现细节是很危险的一具体实现可能发生改变,对同一语言的其他实现可能使用不同的方式。而在另一方面, CPython是得到广泛使用的Python实现(然而其他一些实现的拥护者也在增加),其中的特殊细节有时也值得一提,特别是当其实现方式导致额外的限制时,因此,你会发现在正文里不时会跳出来一些简短的”实现注释 .每种Python实现都带有一些内置和标准的模块。相关的文档可参见library-index索引。少数内置模块也会在此提及,如果它们同语言描述存在明显的关联。
1.1其他实现虽然官方Python实现差不多得到最广泛的欢迎, 但也有一些其他实现对特定领域的用户来说更其吸引力。知名的实现包括:CPython这是最早出现并持续维护的Python实现, 以C语言绢写, 新的语言特性通常在此率先添加。Jython以Java语言编写的Python实现, 此实现可以作为Java应用的一个脚本语言, 或者可以用来创建需要Python for.NET此实现实际上使用了CPython实现, 但是属于.NET托管应用并且可以引人NET类库, 它IronPython另一个NET的Python实现, 与Python.NET不同点在于它是生成IL的完全Python实现, 并且The Python Language Reference, 发布3.9.1rc 1PyPy完全使用Python语言编写的Python实现。它支持多个其他实现所没有的高级特性, 例如非栈式支持以上这些实现都可能在某些方面与此参考文档手册的描述有所差异, 或是引人了超出标准Python文档范瓶的特定信息、请参考它们各自的专门文档,以确定你正在使用的这个实现有哪些你需要了解的东西.Java类库支持的应用, 想了解更多信息可访问Jython网站。的创造者是Brian Lloyd, 想了解详情可访问Python for NET主页将Python代码直接编译为.NET程序集, 它的创造者就是当初创造Jython的Jim Hugunin。想了解详情可访问Tron Python网站。和JIT编译器等-此项目的目标之一是通过允许方便地修改解释器(因为它是用Python编写的) , 鼓励该对语言本身进行试验。想了解详情可访问PyPy项目主页,
1.2标注句法和词法解析的描述采用经过改进的BNF语法标注。这包含以下定义样式nameIc_letter(lc_letter l _ ) +lc_letter“a . z 第一行表示name是一个lc_letter之后跟零个或多个le_letter和下划线。而一个1c_letter则是任意单个'a'至'z'字符。(实际上在本文档中始终采用此规则来定义词法和语法规则的名称。)每条规则的开头是一个名称(即该规则所定义的名称)加上::=.竖线(1)被用来分隔可选项:它是此标注中最灵活的操作符。星号(*)表示前一项的零次或多次重复;类似地,加号(+)表示一次或多次重复,而由方括号括起的内容([))表示出现零次或一次(或者说,这部分内容是可选的)。+和+操作符的绑定是最紧密的:圆括号用于分组。固定字符串包含在引号内,空格的作用仅限于分隔形符。每条规则通常为一行:有许多个可选项的规则可能会以竖线为界分为多行。在词法定义中(如上述示例),还额外使用了两个约定:由三个点号分隔的两个字符字面值表示在指定(闭)区间范困内的任意单个ASCII字符, 由尖括号( .2) 括起来的内容是对于所定义符号的非正式描述; 即可以在必要时用来说明'控制字符的意图。虽然所用的标注方式几乎相同,但是词法定义和句法定义是存在很大区别的:词法定义作用于输人源中单独的字符, 而句法定文则作用于由词法分析所牛成的形符流, 在下一章节(词法分析”) 中使用的BNF全部都是词法定义:在之后的章节中使用的则是句法定义.
CHAPTER 2词法分析Python程序由一个解析器读取, 输人到解析器的是一个由词法分析器所生成的形符靠, 本章将描述词法分新器是如何将一个文件拆分为一个形待的Python会将读取的程序文本转为Unicode码点; 源文件的文本编码可由编码声明指定, 默认为UTF-8, 详情见PEP 3120.如果源文件无法被解码、将会引发SyntaxError.2.1行结构一个Python程序可分为许多逻辑行,2.1.1逻辑行逻辑行的结束是以NEWLINE形符表示的。语句不能跨越逻辑行的边界, 除非其语法允许包含NEWLINE(例如复合语句可由多行子语句组成),一个逻辑行可由一个或多个物理行按照明确或隐含的行拼接规则构成。2.1.2物理行物理行是以一个行终止序列结束的字符序列。在源文件和字符丰中,可以使用任何标准平台上的行终止序列-Unix所用的ASCII字符LF(换行) , Windows所用的ASCII字符序列CRLF(回车加换行) .或者旧Macintosh所用的ASCII字符CR(回车) , 所有这些形式均可使用, 无论具体平台, 输人的结束也会被作为最后一个物理行的隐含终止标志。当嵌人Python时, 源码字符串传人Python API应使用标准C的传统换行符(即 n, 表示ASCII字符LF作为行终止标志)。The Python Language Reference, 发布3.9.1rc 12.1.3注释一条注释以不包含在字符串字面值内的井号(#)开头,并在物理行的末尾结束,一条注释标志着逻辑行的结束,除非存在隐含的行拼接规则。注释在语法分析中会被忽略。2.1.4编码声明如果一条注释位于Python脚本的第一或第二行, 井且匹配正则表达式coding t=:1 s*(t-Aw.J+) , 这条注释会被作为编码声明来处理;上还表达式的第一组指定了源码文件的编码.编码声明必须独占一行.如果它是在第二行,则第一行也必须是注释.推荐的编码声明形式如下
Contents
1概述
其他实现
词法分析
2.1行结构.
2.1.2逻辑行
物理行·
213注释
2.14编码声明,
21.5显式的行拼接
2.1.6隐式的行拼接
标准类型层级结构.
特殊方法名称
3.3.10特殊方法查找.
6.2.1标识符(名称)
空白行.
218缩进:
2.1.9其他形符
标识符和关键字
2.3.2字面值一分
2.4.7运算符.
分隔符
3数据模型
3.1对象、值与类型,
3.4协程
4执行模型
4.1程序的结构.
42命名与绑定
4.3异常
5导人系统
5.1Import lib,
5.9形符之间的哈白
关键字
保留的标识符类
字符中和学节串面值
字符串字面值拼接.
格式化字符用字面值
数字字面值.
整型数字面值
浮点数字面值
虚数字面值.
基本定制
自定义属性访问.
自定义类创建
自定义实例及子类检查,
模拟泛型类型4+4
模拟可调用对象.
模拟容器类型.
模拟数字类型
wih语句上下文管理器
可等待对象.
协程对象-.
异步迭代器.
异步上下文管理器
名称的绑定:
名称的解析
内置命名空间和受限的执行
与动态特性的交互:
5.1常规包
5.2.2命名空间包,
5.3.1模块存
5.3.2查找器和加载
5.3.3导人钩了.
5.3.4元路径
5.4.1加栽器
5.4.2子模块
5.4.3模块规格说明
5.4.4导人相关的模块性
5.4.5module.path
546模块的repr.
5.4.7已缓存字节
基于路径的查找器
5.5.1路径条目查找器
5.5.2路径条目查器协议
替换标准导人系统.
包相对导人
有关_man__的特殊事項,
5.8.1_main____spc.
开放问题项.
5.10参考文献.
6.3.4字面值.
带圆括号的形式::
列表、集合与字真的显示
列表显示.
集合显示.
字典显示.
生成器表达式
yield表达式,
属性引用
抽取:
切片,,
调用:
带标注的赋值语句
async for语句:
a syne with语句
6.9await表达式.
幂运算符.
一元算术和位运算
元算术运算符:
移位运算,.
二元位运算
6.10.1值比较
6.10.2成员检测运