2.1 常量与变量
Python常量与变量
按照在程序运行时是否会发生改变来进行分类,可以将量分为常量和变量两种类型。
2.1.1 常量与变量的概念
在Python中,程序运行时不会被更改的量称为常量,比如,数字7和字符串“abc”在运行时一直都是数字7跟字符串“abc”,不会更改成其他的量,这些就是常量。除此之外,还可以定义任意的字符串为指定值的常量。
常量有一个特点,就是一旦绑定,不能更改。
而变量则与常量的含义相反,在程序运行时可以随着程序的运行而更改的量称为变量。比如可以定义一个变量i,并将数字5赋给变量i,然后将数字7赋给变量i,那么这个时候i的值就变成了7,i的值是可以改变的,像i这种可以改变值的量称为变量。
同样,变量也有一个特点,就是即使赋值,也可以更改。
2.1.2 常量与变量应用实例
为了让大家更好地认识常量与变量,这里将结合实例为大家分别阐述常量与变量的相关知识点。
首先,从变量开始说起。
在学习变量的应用之前,要学习刚才提到的赋值。所谓“赋值”,即将相应的具体的数据存储到某个量中,其实,读者可以把对应的量看成一个容器,而赋值就相当于把对应的数据添加到这个容器中。如果该容器是变量,则该容器中的数据可以变化;若该容器是常量,则该容器里面一旦有了数据,就不能再赋予新的数据,即不能再变化。
可以打开Python编辑器,新建一个Python程序文件,然后在该文件中输入如下代码:
i=7 print(i)
该程序的第一行即为赋值的过程,“=”在Python里面叫作赋值符号(在Python里面,等于符号是“==”,注意区别开)。在遇到赋值符号的时候,大家可以养成一个习惯:从右往左看。也就是说,赋值符号的执行过程是从右往左执行的,“i=7”的意思指的是将数字7赋值给变量i,赋值后i的值就是7了。上述程序中,将i称为变量名,将7称为i的变量值。
在第二行程序中,将该变量i的值打印输出,所以程序的执行结果如下(直接输出数字7):
7
在Python里面,变量是不需要提前声明的,在上述赋值语句执行的时候,会默认将赋值符号左边的量看成是变量,所以如果想定义一个变量,只需要取一个符合标识符命名规则的变量名,然后写一个赋值语句即可。关于标识符的命名规则,将在2.4节中进行具体的讲解。
因为变量可以随着程序的运行而改变,而生活中的事物很多时候是需要变化的,所以变量相对来说比常量适应更多的情境,所以变量在Python编程中的应用是非常广的。
接下来将通过下一个程序让大家进一步理解Python的变量,可以输入如下所示的程序:
i=5 print(i) i+=1 print(i) i+=2 print(i) i+=3 print(i)
此时程序应该会输出什么呢?
各位读者可以初步思考一下,接下来进入上述程序的分析。
首先,将数字5赋值给变量i,然后输出i的值,此时应该会输出数字5,然后进行了“i+=1”的运算,“i+=1”实际上相当于“i=i+1”,也就是以下两种写法是一样的(k表示某个变量名,a表示某个数字)。
写法1:k+=a
写法2:k=k+a
所以,“i+=1”的意思是,将i+1的运算结果再次赋值给变量i,上面i已经是5了,此时相当于“i=5+1”,所以执行了这一行代码之后,变量i的值就变成了数字6。
接下来通过print(i)将变量i的值(数字6)输出。
随后,运行“i+=2”这一行程序,显然,这一行程序的含义是i的值加上2之后再次赋值给变量i,所以i的值变成了数字8(i=6+2),然后同样通过print()函数将该值输出。
随后运行“i+=3”,想必大家对这种写法非常熟悉了,它表示将当前i的值加上数字3后再次赋值给变量i,然后通过print(i)将赋值后的结果输出,所以最后输出的结果是11。
该程序的执行结果如下:
5 6 8 11
大家可以动手写一写以便能够更好地理解变量。
接下来为大家阐述Python常量的应用实例。
在Python中,默认是没有常量的。如果要在Python中使用常量,则需要自己实现常量的功能。
常量是一旦绑定了数据就不能变更的量。所以,可以定义一个模块(可能读者现在还不知道模块的含义及如何使用模块,简单来说,模块是将相应的功能进行封装,以方便使用,在第6章会进行深入讲解,现在只需知道如何初步使用即可),在模块中实现常量的功能。当需要使用常量的时候,只需要导入该常量模块使用即可。
具体做法如下:
首先编写一个Python文件,文件的内容如下:
class _const: def __setattr__(self,name,value): class myError(Exception):pass if name in self.__dict__: raise myError(name+"不能再次绑定值") self.__dict__[name] = value import sys sys.modules[__name__] = _const()
该文件即为Python常量功能的实现文件,读者学到这里的时候,不一定需要看懂上面的代码,因为上面的代码用到了还没有学到的知识,在后续章节中会逐渐学到,只需要大致理解即可。上面的代码中,首先定义了一个类,然后在该类中定义了一个自定义异常myError,该异常主要在用户给常量绑定一个新值的时候触发。随后,假如给一个常量赋值,首先通过“if name in self.__dict__”判断该常量是否之前定义过。如果定义过,将引发该自定义异常,提示用户该常量不能再次绑定;若之前没有给该常量赋值,则可以通过上述代码中的“self.__dict__[name] = value”给该常量赋值。所以,该程序可以实现常量功能。
随后,将该程序文件命名为“const.py”,然后保存在Python安装目录下面的Lib目录下,比如,这里的Python安装目录是D:/Python35,所以可以将上述文件存储在D:/Python35/Lib/目录中,此时该文件就成了Python的一个模块。在Python中,自定义一个模块非常简单,只需要将写好的程序放在Python安装目录下面的Lib目录下面即可。
随后,打开IDLE,编写一个新程序,比如可以直接进入到运行单行Python程序的Python Shell界面,然后输入如下代码导入常量这个模块。因为如果要使用对应的模块,需要首先导入该模块,通过import语句导入:
>>> import const
导入了该模块之后,可以尝试定义一个常量。在这里,如果想定义一个常量,只需要按照如下格式定义即可:
const.常量名=常量值
输入如下语句:
>>> const.a="Hello"
此时定义了一个名为a的常量,该常量的值为“Hello”。
接下来如果想定义其他的常量,只需要改变常量名即可,而常量值随意,没有过多要求。如下所示,定义了一个名为abc的常量,该常量的值为“Python”。
>>> const.abc="Python"
既然常量是一旦绑定值就不能改变的量,可以尝试给上面已经定义好的常量a绑定一个新值,若提示出错信息,则说明我们的常量模块的功能成功实现了;若可以绑定新值,则说明上述关于常量实现的程序有误。
输入以下程序:
>>> const.a="Hi"
此时尝试将值“Hi”重新跟常量a绑定,输入以上程序之后按回车键,会出现如下的错误提示信息:
>>> const.a="Hi" Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> const.a="Hi" File "D:\Python35\lib\const.py", line 5, in __setattr__ raise myError(name+"不能再次绑定值") const._const.__setattr__.<locals>.myError: a不能再次绑定值
此时提示“a不能再次绑定值”,所以此时常量的功能是成功实现的。若以后需要使用常量,只需要导入const模块,按照“const.常量名=常量值”的方式定义常量即可。