- Python程序设计应用教程
- 夏敏捷 张西广
- 1040字
- 2021-03-25 10:05:11
2.2 常量和变量
2.2.1 变量
变量的概念基本上和初中代数中的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中用一个变量名表示,变量名必须是大小写英文、数字和“_”的组合,且不能以数字开头。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026003.jpg?sign=1739234527-4ZZhJlNeE6M3q5hsGxzL0hvGfdSUCrf7-0-dbf34079676b6781e7b2c973e59ff330)
在Python中,等号(=)是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026004.jpg?sign=1739234527-LEhoxYzpptDtkNee8a0qaUDrVNUq8ihn-0-3fcab4b396a94f10bf8c644970b59c80)
Python语言采用基于值的内存管理方式,不同的值分配不同的内存空间。可理解为,Python变量并不是某一个固定内存单元的标识,而是对内存中存储的某个数据的引用,这个引用是可以动态改变的。
这种变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配,就会报错。例如,C语言是静态语言,赋值语句如下(//表示注释):
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026005.jpg?sign=1739234527-543Lpbr552XpNXpxUjdrE6lYkS2Wioxy-0-344d88fd8931c7b7b939b62f7e6745ba)
同静态语言相比,动态语言更灵活,就是这个原因。
不要把赋值语句的等号等同于数学的等号。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027001.jpg?sign=1739234527-7P0z1MLuV1N8klw5hBO2Osn4sUZyYdxk-0-c89f5ef4bf0f5444b52c3ac86a51d5a4)
如果从数学上理解x = x+2无论如何是不成立的。在程序中,赋值语句先计算右侧的表达式x+2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12。
理解变量在计算机内存中的表示也非常重要。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027002.jpg?sign=1739234527-1xN1urfeF8reSdvEEnlsh1dyLVzhtWYh-0-b774daf2b5eac25cd82e0a30c73e15a2)
Python解释器做了两件事情:
(1)在内存中创建了一个'ABC'的字符串。
(2)在内存中创建了一个名为a的变量,并把它指向'ABC',如图2-1所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027003.jpg?sign=1739234527-IQzeHCtGDrjivvztW1dlvEIEJlM8nnU7-0-694bd222b668665b9a82472e43bf457e)
图2-1 a变量指向'ABC'
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027004.jpg?sign=1739234527-DQmG2J6HRHH6ETMRG02eixcWv1Ff5wgd-0-fe3ba52ac53016c63ad39948e1d4fd85)
最后一行打印出变量b的内容到底是'ABC',还是'XYZ'?如果从数学意义上理解,就会错误地得出b和a相同,也应该是'XYZ',但实际上b的值是'ABC'。下面分析一下执行过程:
执行a = 'ABC',Python解释器创建了字符串'ABC'和变量a,并把a指向'ABC'。
执行b = a,解释器创建了变量b,并把b指向a指向的字符串'ABC',如图2-2所示。
执行a = 'XYZ',解释器创建了字符串'XYZ',并把a指向'XYZ',但b没有更改,如图2-3所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027005.jpg?sign=1739234527-hQfnYHX1x42fm4jQ9PQvl9Loqk4S6Ei6-0-e3b9e32a8d754c70c14421ac75c2f931)
图2-2 a、b变量都指向'ABC'
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027006.jpg?sign=1739234527-CveNm7h6Ax82aSfDbwUvgyZE8IZ87ETv-0-399b6f9e869dbea35dfc85797f0594fa)
图2-3 a变量指向'XYZ'
所以,最后打印变量b的结果自然是'ABC'。
内置的type()函数可以用来查询变量的数据类型。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027007.jpg?sign=1739234527-hQz5rmg9o9BnI0rvZ3tTe7lAFjI0t72r-0-56eff50b797f07813966be552bab78d8)
当变量不再需要时,Python会自动回收内存空间,也可以使用del语句删除一些变量。
del语句的语法:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027008.jpg?sign=1739234527-YIWI1nBiEcjVcXE9ACYcCBTSGhFoWYIE-0-3b3771870aa0a882cda687386227b691)
可以通过使用del语句删除单个或多个变量对象。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027009.jpg?sign=1739234527-UrNPppT3IZ9MquvKIdxHKhKep5zMZ49N-0-48ba74fd6eb8b3275a1bf5f56de159cf)
2.2.2 常量
所谓常量就是不能变的变量,例如,常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00028002.jpg?sign=1739234527-9ffn0KNpnwXVuCToGSUpWJloqNuZpe8u-0-97e53ddc6ec78cac21edc00199a05497)
但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变。所以,用全部大写的变量名表示常量只是一个习惯上的用法,实际上可以改变变量PI的值。