一、 变量的基本使用
变量是存储数据的标识符, 用来存储数据。在使用变量中应该遵循先定义再使用的原则。变量的定义语法如下:
变量名 = 数据
在Python语言中定义变量不需要指定类型,因为Python属于动态语言。与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配就会报错。这也是Python使用起来很灵活的原因之一。
1.1、变量的命名规则
变量在程序中就是用一个变量名表示,变量名需要遵循以下原则。
- 必须是大小写英文、数字和_的组合,且不能用数字开头,比如:myname是合法变量名。但是11a不是一个合法的变量名。
- 在给变量命名的时候最好做到见名知意,在Python中一般使用小写字母命名变量。
- 变量不能使用Python内置的关键字。例如变量名不能使用 print。
- 一个单词无法表示变量可以使用多个单词用下划线拼接,例如 first_name。
- Python推荐下划线命名法,不推荐驼峰命名法,这与Python的内建函数类的命名风格保持一致。
1.2、变量的使用示例
以下是一个使用变量的Python示例:
myname = "wfj"
print(myname)
print(myage) # 程序运行到这行代码就会报错,原因myage变量没有定义就直接使用,不符合先定义后使用的原则
二、变量的内存管理
上一章节使用了变量,定义完变量是在内存里开辟了一个内存空间存储数据"wfj",然后把这个数据绑定给变量名myname。因为计算机的内存是有限的,如果程序只使用内存不做释放最终就会把内存撑爆,这就是内存溢出。在C语言中,内存是由开发者来管理,手动申请和释放,一旦使用不当就会造成程序崩溃。但是在Python中为了简单易用,推出了一个内存管理机制,即垃圾回收机制。
2.1、垃圾回收机制
Python内置了垃圾回收机制来管理内存,那什么属于垃圾呢?Python的定义是没有关联变量名的值就属于垃圾。例如"wfj"绑定了myname变量,即可以通过myname来引用它,那它就不是垃圾。这里引出一个概念叫引用计数,即一个内存空间上捆绑了几个变量。
引用计数的增加
a = 100
b = a
c = a
这个实例中,定义了变量a绑定了值100,即申请了一个内存空间存储100这个值。然后变量a指向这片内存空间,b和c再指向了a,此时值100的引用计数就是3.
引用计数的减少
del a
del b
c = 123
del 是解除变量名和值的引用关系,这个示例执行后那100上的引用计数就变成1了。在执行c = 123后,将变量c重新绑定到了值123的内存空间上,那么值100的引用计数就变为0了,此时它就成了垃圾需要回收。Python的垃圾回收机制不需要人工操作,它会定期扫描内存来自动进行垃圾回收。
三、 变量的id与type
id和type是变量值的两大特征。id是根据变量的内存地址计算出的一个id号码,它并不是实际的内存地址。 type是变量值的类型,例如名字我们使用字符串"wfj"来存储,年龄使用数字28存储。这里就引出了数据类型的概念,后续我们会对数据类型进行详细解释。
>>> myname = "wfj"
>>> age = 73
>>> print(id(myname))
140234269543312
>>> print(type(myname))
<class 'str'>
>>> print(type(age))
<class 'int'>
如上实例,我们可以看到myname的类型是 str, age的类型是int。
四、判断变量是否相等
判断变量是否相等有两种方式 is 和 运算符 ==。 首先 is 是身份运算,用来比较两个变量的身份是否相等。上边我们说了变量的身份就是变了的 id 号,因此is是用来比较两个变量的id是否相等。== 运算符是比较两个变量的值是否相等。
>>> a = "王富杰"
>>> b = "王富杰"
>>> id(a)
140234269548784
>>> id(b)
140234269548976
>>> a == b
True
>>> a is b
False
如上实例,定义的两个变量 a 和 b。值一样,但是他们的id不一致,说明他们是两个不同的内存空间。因此 == 判断返回的是True,使用 is 判断返回的是 False。如果在pycharm中运行,结果可能和示例不一致,原因pycharm做了优化。
五、小整数池
第四章节我们看到只要有赋值操作,产生了新的值就会产生新的内存空间。接下来我们再看一个示例:
>>> a = 10
>>> b = 10
>>> id(a)
140234268690624
>>> id(b)
140234268690624
>>> a is b
True
发现这个示例和前一章节说的结论不一致。原因是重复申请内存空间会带来效率问题,Python为了优化,提出了小整数池的概念。为了避免创建相同的值而重复申请内存空间带来的效率问题,Python解释器会在启动的时候创建出小整数池,范围是 -5 到 256。这些小整数在启动后就被创建在内存空间中,永远不会被垃圾回收机制回收。
Python解释器不止有小整数池,常见的字符串如 a b c等也做了一样的优化。在pycharm中做了进一步优化扩大了小整数池的范围,此处做了解即可。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付
