2.3. 标识符和关键字

标识符 (或者叫做 名称) 由以下词法定义进行描述。

Python 中的标识符语法是基于 Unicode 标准附件 UAX-31,并加入了下文所定义的细化与修改;更多细节还可参见 PEP 3131

在 ASCII 范围内 (U+0001..U+007F),可用于标识符的字符与 Python 2.x 一致: 大写和小写字母 AZ,下划线 _ 以及数字 09,但不可以数字打头。

Python 3.0 引入了 ASCII 范围以外的额外字符 (见 PEP 3131)。这些字符的分类使用包含于 unicodedata 模块中的 Unicode 字符数据库版本。

标识符的长度没有限制。对大小写敏感。

  1. identifier ::= xid_start xid_continue*
  2. id_start ::= <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
  3. id_continue ::= <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
  4. xid_start ::= <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
  5. 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.unicode.org/Public/13.0.0/ucd/DerivedCoreProperties.txt