一、 标识符

所谓的标识符就是对变量、常量、函数、类等对象起的名字。

首先必须说明的是,Python语言在任何场景都严格区分大小写!

Python对于标识符的命名有如下规定:

  • 第一个字符必须是字母表中的字母或下划线‘_’

例如,a, Ak, _set_id, green等都是可以的,但是例如$abc, &_a, ~bashrc, 123abc等是不可以的!

那么,有些同学可能会问, 中文可以吗?很好!我非常喜欢和赞同这种思考和提问的方式,它能帮助你更好的挖掘核心原理。答案是可以的!比如下面的例子:

>>> 我 = 1
>>> 我
1
>>> 什么 = "apple"
>>> print(什么)
apple

Python3全面支持Unicode后,对中文的兼容性是越来越好了。居然真的可以用中文做变量名,不信的话,你可以自己在IDLE里试试。

然而,虽然支持中文标识符,但是没有人会这么干,我也不建议大家这么做,请将第一个字符必须是字母表中的字母或下划线‘_’作为原则来执行。

另外,以下划线开头的标识符通常都有特殊意义。以单下划线开头的变量,例如_foo代表禁止外部访问的类成员,需通过类提供的接口进行访问,不能用"from xxx import *"导入;而以双下划线开头的,例如__foo,代表类的私有成员;以双下划线开头和结尾的(__foo__)是python里特殊方法专用的标识,如__init__()代表类的构造函数。这些在后面会有专门的论述,暂时只要知道它们的特殊性就行了。

  • 标识符的其他的部分由字母、数字和下划线组成

也就是说标识符除了首字符不可以是数字外,其它部分还可以包含数字。那特殊字符呢?当然还是不行的啦。所以,a123c_, bbc, city_of_china等等都是可行的,而a&b, king-of-the-world, love@qq.com都是不行的。

另外要注意的是,由于l(小写的L)和数字1, 大小写的o与数字0在外观上的相似性,请尽量不要让它们相邻出现,保持语义的清晰性,确保不会发现错误认读的情况。

同样,我们继续烧脑,英文中夹塞中文在语法上也是可以的,但绝对不要这么做!

>>> a这都能行b舅服你 = 100
>>> a这都能行b舅服你
100
  • 标识符对大小写敏感

这条是基于Python严格区分大小写的,所以标识符abc与ABC是不同的两个。

  • 变量名全部小写,常量名全部大写

这条不能算语法层面的要求,而是代码规范的要求。虽然你可以用PI来表示一个变量,但通常我们都会认为这是代表圆周率的一个常量。

  • 函数和方法名用小写加下划线

同样也不是语法强制,而是代码规范,我们在定义一个函数或者方法的名字的时候,请尽量用类似get、set、count_apple、total_number之类的命名方式。

  • 类名用大写驼峰

也不是语法强制,而是代码规范。所谓的大写驼峰指的是每个单词的首字母大写,组合在一起就像驼峰一样高低高低的排列。例如ThreadMixIn、BrokenBarrierError、_DummyThread等等

  • 模块和包的名字用小写

请尽量小写模块和包的名字,并且不要和标准库以及著名的第三方库同名。

最后需要提醒大家的是:

变量的命名不要用关键字和内置函数的名字!

下面我们就会讲到Python有哪些关键字,而内置函数的知识则要到后面的章节。

二、 Python保留字

Python保留字,也叫关键字,是Python语言官方确定的用作语法功能的专用标识符,不能把它们用作任何自定义标识符名称。关键字只包含小写字母。Python的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

>>> import keyword

>>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] 

也可以参照下表:

image.png-38.1kB

那么如果,真的犯了这个错,会怎么样呢?举个例子:

>>> if = 1
SyntaxError: invalid syntax
>>> print(and)
SyntaxError: invalid syntax
>>> def = "hi"
SyntaxError: invali