1.3.2 变量与常量
任何编程语言都需要处理数据,如数字、字符串、字符等,用户可以直接使用数据,也可以将数据保存到变量中,方便以后使用。
变量(Variable)可以看成一个小箱子,专门用来“盛装”程序中的数据。每个变量都拥有独一无二的名字,通过变量的名字就能找到变量中的数据。从底层看,程序中的数据最终都要存储到内存中,变量其实就是这块内存的名字。图1-24所示是变量age的示意。
图1-24 变量示意
和变量对应的是常量(Constant),它们都是用来“盛装”数据的小箱子,不同的是:变量保存的数据可以被多次修改,而常量一旦保存某个数据之后就不能修改了。
1.变量的赋值
在编程语言中,将数据放入变量的过程叫作赋值(Assignment)。Python使用等号“=”作为赋值运算符,具体格式为:
其中,name表示变量名;value表示值,也就是要存储的数据。
例如,下面的语句将整数22赋值给变量num:
在程序的其他地方,num就代表整数22,使用num也就是使用22。
【例1-6】 变量赋值。
变量的值不是一成不变的,它可以随时被修改,只要重新赋值即可。另外用户也不用关心数据的类型,可以将不同类型的数据赋值给同一个变量。
【例1-7】 变量赋值的变化。
运算结果:
除了赋值单个数据,用户也可以将表达式的运行结果赋值给变量。
【例1-8】 将表达式的运行结果赋值给变量。
运算结果:
2.下画线、双下画线开始的特殊变量及特殊方法专用标识
Python用下画线和双下画线作为变量前缀和后缀指定的特殊变量。
(1)_xxx变量名
_xxx被看作是“私有的”变量,在模块或类外不可以使用。当变量是私有的时候,用_xxx来表示变量是很好的习惯。_xxx变量是不能用“from module import *”导入的。在类中“单下画线”开始“_foo”的成员变量或类属性叫作保护变量,意思是只有类对象和子类对象自己能访问这些变量。
(2)__xxx类中的私有变量名
“双下画线”开始“__foo”的变量是私有成员变量,意思是只有类对象自己能访问,连子类对象也不能访问这个数据。
(3)__xxx__特殊方法专用标识
以双下画线开头和结尾的“__foo__”代表Python里的特殊方法,如__init__(self,...)代表类的构造函数。这样的系统特殊方法还有许多,如:
因此要注意避免用下画线作为一般变量名的开始。
3.常量、内置常量
变量是变化的量,常量则是不变的量。Python中没有使用语法强制定义常量。但是Python有少数的常量存在于内置命名空间中,称为内置常量,具体如下。
(1)False
bool类型的假值。给False赋值是非法的并会引发SyntaxError。
(2)True
bool类型的真值。给True赋值是非法的并会引发SyntaxError。
(3)None
NoneType类型的唯一值。None经常用于表示因为默认参数未传递给函数时的值。需要注意的是,给None赋值是非法的,并会引发SyntaxError报错。
(4)NotImplemented
二进制特殊方法应返回的特殊值,如__eq__()、__lt__()、__add__()、__rsub__()等,表示操作没有针对其他类型实现。为了相同的目的,可以通过就地二进制特殊方法,如__imul__()、__rightnd__()等作为返回值,它的逻辑值为真。
(5)Ellipsis
与省略号的字面意思相同。特殊值主要与用户定义的容器数据类型的扩展切片语法结合使用。
(6)__debug__
如果Python没有以-O选项启动,则此常量为真值。
(7)quit(code=None)、exit(code=None)
当打印此对象时,会打印出一条消息,例如“Use quit() or Ctrl-D (i.e. EOF) to exit”,当调用此对象时,将使用指定的退出代码来引发SystemExit。
(8)copyright、credits
打印或调用的对象分别打印版权或作者的文本。
(9)license
当打印此对象时,会打印出一条消息“Type license() to see the full license text”。当调用此对象时,将以分页形式显示完整的许可证文本(每次显示一屏)。
当然,用模块和类可以实现真正的常量,这在本书第5章进行详细介绍。