在Python中,一切都是对象,包括常量数据类型,如整数数据类型(1,2,3...),字符串数据类型("ABC")。想要使用这些对象,就要使用它的对象引用。赋值操做符,其实是使得对象引用对内存中存放数据的对象进行引用。html
那什么是标识符?标识符是对对象引用起的一个名字。
有效的Python标识符规则:
(1)长度任意长;
(2)标识符不能与关键字同名;
(3)在2.x版本的Python中,标识符以ASCII的字母或下划线开始,后面能够接字母、数字、下划线;在3.x的Python中,标识符ASCII字母、下划线以及大多数非英文语言的字母,只要是Unicode编码的字母均可以充当引导字符,后续字符能够是任意引导符,或任意非空格字符,包括Unicode编码中认为是数字的任意字符。(所以
可使用阿拉伯语、中文、日语或俄语字符或Unicode字符集支持的任意其余语言中的字符进行命名)
约定:
(1)不要使用Python预约义的标识符名,所以要避免使用NotImplemented与Eliiipsis等名字,这些在将来有可能被Python的新版本使用到;
(2)不要使用Python内置函数名或内置数据类型或异常名做为标识符名;
(3)关于下划线的约定,名字的开头和结尾都使用下划线的状况应该避免,由于Python中大量采用这种名字定义了各类特殊方法和变量;在有些状况,以一个或两个下划线引导的名称,可是没有使用两个下划线结尾的应该特殊对待。
举例:
上面的语句是合法的,可是它将与math数据类型绑定的对象引用从新与int数据类型对象绑定,那么将不能正常使用math数据类型的属性了。
#合法
a123_=2
_a123=2
我=2 #中文
α=2 #希腊字母
#不合法的标识符名
a-b=2 #由于包含了减法操做符,'-'不是一个Unicode字母、数字、下划线,不能将2赋值给操做符
2miles=2 #不能数字开头
I'm=2 #单引号不是一个Unicode字母、数字或下划线
关于下划线还有一点想说的:
单一的下划线能够做为一个标识符,在交互解释器或Python Shell内部,下划线实际上存放了最后一个被评估的表达式的结果。在一般运行的程序中,使用下划线和其余普通标识符同样,须要本身预先定义,非系统占有。
在不关心迭代针对的数据项是,有些程序员喜欢在for...in..中使用_,如:
#没有使用到迭代的数据项
for _ in (0,1,2,3,4,5):
print("Hello")
另外要注意一点,一些编写国际化程序的程序员通常会使用_做为其翻译函数的名称。这些程序员通常不使用gettext("translate me"),而是使用_("translate me")。
当变量是私有的时候,用_xxx 来表示变量是很好的习惯。
在类中,
“单下划线” 开始的成员变量叫作保护变量,意思是只有类对象和子类对象本身能访问到这些变量
,需经过类提供的接口进行访问,不能用“from xxx import *”而导入
;
“双下划线” 开始的是
类的
私有成员,意思是只有类对象本身能访问,连子类对象也不能访问到这个数据。
以双下划线开头和结尾的(__foo__)表明python里特殊方法专用的标识,如 __init__()表明类的构造函数。
参考:
《Python 3 程序开发指南》
(第二版)
本文连接: