- 2.3. 标识符和关键字
- 2.3.1. 关键字
- 2.3.2. 保留的标识符类
2.3. 标识符和关键字
标识符 (或者叫做 名称) 由以下词法定义进行描述。
Python 中的标识符语法是基于 Unicode 标准附件 UAX-31,并加入了下文所定义的细化与修改;更多细节还可参见 PEP 3131 。
在 ASCII 范围内 (U+0001..U+007F),可用于标识符的字符与 Python 2.x 一致: 大写和小写字母 A
至 Z
,下划线 _
以及数字 0
至 9
,但不可以数字打头。
Python 3.0 引入了 ASCII 范围以外的额外字符 (见 PEP 3131)。这些字符的分类使用包含于 unicodedata
模块中的 Unicode 字符数据库版本。
标识符的长度没有限制。对大小写敏感。
- identifier ::=
xid_start
xid_continue
*- id_start ::= <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
- id_continue ::= <all characters in
id_start
, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>- xid_start ::= <all characters in
id_start
whose NFKC normalization is in "id_start xid_continue*">- xid_continue ::= <all characters in
id_continue
whose NFKC normalization is in "id_continue*">
上文所用 Unicode 类别码的含义:
Lu - 大写字母
Ll - 小写字母
Lt - 词首大写字母
Lm - 修饰字母
Lo - 其他字母
Nl - 字母数字
Mn - 非空白标识
Mc - 含空白标识
Nd - 十进制数字
Pc - 连接标点
Other_ID_Start - 由 PropList.txt 定义的显式字符列表,用来支持向后兼容
Other_ID_Continue - 同上
所有标识符在解析时会被转换为规范形式 NFKC;标识符的比较都是基于 NFKC。
Unicode 4.1 中的所有可用标识符字符列表参见以下非规范 HTML 文件链接 https://www.dcl.hpi.uni-potsdam.de/home/loewis/table-3131.html
2.3.1. 关键字
以下标识符被作为语言的保留字或称 关键字,不可被用作普通标识符。关键字的拼写必须与这里列出的完全一致。
- False await else import pass
- None break except in raise
- True class finally is return
- and continue for lambda try
- as def from nonlocal while
- assert del global not with
- async elif if or yield
2.3.2. 保留的标识符类
某些标识符类 (除了关键字) 具有特殊的含义。这些标识符类的命名模式是以下划线字符打头和结尾:
_*
- 不会被
from module import *
导入。特殊标识符在交互式解释器中被用来存放最近一次求值结果;它保存在
builtins
模块中。当不处于交互模式时,无特殊含义也没有预定义。参见 import 语句。
注解
_
作为名称常用于连接国际化文本;请参看 gettext
模块文档了解有关此约定的详情。
*
系统定义的名称。这些名称由解释器及其实现 (包括标准库) 所定义。现有系统定义名称相关讨论参见 特殊方法名称 等章节。未来的 Python 版本中还将定义更多此类名称。任何 不遵循文档指定方式使用
*
名称的行为都可能导致无警告的出错。__*
- 类的私有名称。这种名称在类定义中使用时,会以一种混合形式重写以避免在基类及派生类的 "私有" 属性之间出现名称冲突。参见 标识符(名称)。