目录
- 变量
- 1.什么是变量
- 2.为什么有变量?
- 3.定义变量
- 4.变量的组成
- 5.变量名的命名规范
- 6变量名的两种风格
- 常量
- Python变量内存管理
- 1.变量存哪儿?
- 2.Python垃圾回收机制
- 2.1 引用计数
- 3.小整数池
- 变量的三个特征
- 花里胡哨赋值
- 1.链式赋值
- 2.交叉赋值
- 注释
变量
1.什么是变量
变量从字面意思可以理解成:是变化的量。但是这样理解和没有理解貌似没有什么区别,我们把变量两个字拆分看看。
我们首先来想想看你是怎么认识我的,今天来你会认识我,明天来你还会认识我。那你是不是记住我这个人的典型特征,比如我的名字Nick、体重140、身高180…世间万物我们是不是都是这样去认识的?毫无疑问是的。既然人能识别世间万物,那么我们之前一直把计算机想象成人,那是不是说计算机也能识别世间万物呢?对的。计算机通过记录我们的状态认识我。这就是量的概念。
- 量:记录现实世界中的状态,让计算机能够像人一样去识别世间万物。
今天我可能180,明年我是不是可能就是185了(5cm不过分),那这种状态是不是会发生变化。
- 变:现实世界中的状态是会发生改变的。
2.为什么有变量?
对于现实世界,一定是要有一个变量来描述世间万物的。但是计算机为什么也要有变量的概念呢?其实计算机中程序的运行就是一系列状态的变化,如王者荣耀中账号等级0级到30级、废铁到王者;植物大战僵尸中僵尸打着打着就死了。
3.定义变量
就是按照一定的格式赋值,具体格式就是下面对的变量组成的格式。(个人理解)
4.变量的组成
从我们上米昂定义的变量可以看到,变量的组成分为以下三个部分:
- 变量名:变量名用来引用变量值,但凡需要用变量值,都需要通过变量名。
- 赋值符号:赋值
- 变量值:存放数据,用来记录现实世界中的某种状态。
5.变量名的命名规范
一定要记住,定义一个变量其实就是在记录现实世界中的的状态,并且存永远不是目的,取才是目的。所以变量的命名应该满足以下三个规范:
- 变量的命名应该能反映变量值所描述的状态,切记不可用中文
- 变量名必须用字母数字下划线组合,并且变量名的第一个字符不能是数字。
- 关键字不能声明为变量名
6变量名的两种风格
驼峰体
下划线
常量
变量是变化的量,常量则是不变的量。python中没有使用语法强制定义常量,也就是说,python中定义常量本质上就是变量。如果非要定义常量,变量名必须全大写。
如果是常量,那就没必要更改,所以python就只制定了一个规范,而没指定常量的语法,因此常量也是可以修改的,但不建议。
Python变量内存管理
1.变量存哪儿?
x = 10
当我们在p1.py中定义一个变量x = 10
,那么计算机把这个变量值10存放在哪里呢了?我们回顾计算机的三大核心组件为:CPU、内存和硬盘。一定不是CPU,那是存放在内存还是硬盘中了呢?我们再回顾变量运行的三个过程,如果我们没有使用python解释器运行p1.py这个文件,那么x=10
很明显只是很普通的四个字符x、=、1、0。而只有Python解释器运行了这个文件,那字符进入了内存,才会有变量这个概念。也就是说变量是存放在内存当中的。
变量存放在内存中这句话太宽泛了,我们把它具体化。现在想象我们在学校(电脑内存)里上课,学校每开一个班,学校都会开辟一个教室给这个班级上课用(存放变量值10),而班级的门牌号则是(变量名x)。也就是说,对于电脑内存这个大内存,每定义一个变量就会在这个大内存中开辟一个小空间,小空间内存放变量值10,然后内存给这个小空间一个变量名x(门牌号),x指向10。
2.Python垃圾回收机制
2.1 引用计数
从上述的解释我们可以知道只要某个变量值绑定着门牌号,就不是垃圾,反之变量值没有绑定着门牌号,这个变量值就是垃圾,python就会自动清理这个垃圾。这里我们对于这个门牌号给定一个专业的解释,在python中这个门牌号被称作引用计数。
x = 10 # 10引用计数加1为1
y = x # 10引用计数加1为2
x = 11 # 10引用计数减1为1;11引用计数加1为1
del y # 10引用计数减1为0,触发python垃圾回收机制,python清理10的内存占用
上述代码就是一个引用计数加减的过程。
3.小整数池
在pycharm中运行python程序时,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究。
变量的三个特征
打印 :print
判断变量值是否相等:name1 == name2
判断变量id是否相等:整数池范围内的返回值都是True,但是不在的如果是一个一个赋值的返回的是False,如下:
x = 257
z = 257
print(x is z)
# False
花里胡哨赋值
1.链式赋值
a = 10
b = 10
c = 10
d = 10
#可以写为
a = b = c = d = 10
#输出结果一样
2.交叉赋值
a = 10
b = 100
#可以写为
a , b = 10,100
#输出结果一样
注释
就是方便你看的和别人看的 ,核心就是#