
2.5 变量

↑扫码看视频
变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。在计算机编程语言中,将其值在程序的执行过程中可以发生变化的量称为变量。
2.5.1 声明变量
Python语言中不需要单独声明变量,变量的赋值操作就是变量的声明和定义过程。在内存中创建变量时,需要包含变量的标识、名称和数据等信息。
注意:要创建合适的变量名,需要经过一定的编程实践,在程序复杂时尤其如此。随着读者编写和阅读的代码越来越多,将越来越善于创建有意义的变量名。

实例文件bianliang.py的具体实现代码如下所示。

在上述代码中对变量x进行了3次赋值,第1次赋值为“1”,第2次赋值为“2”,第3次赋值为“hello python”。在Python程序中,一次新的赋值将创建一个新的变量。即使变量的名称相同,但变量的标识却并不同。执行后输出的结果如下所示。

print(id(x))的功能是返回变量x的内存地址。
另外,在Python语言中,可以同时赋值多个变量。

实例文件tongshi.py的具体实现代码如下所示。

在上述代码中,对变量a、b进行同时赋值,分别赋值为“0”和“1”,最后分别输出变量a和b的值。执行后输出的结果如下所示。


2.5.2 局部变量
在Python程序中,局部变量是指只能在函数或者代码块内使用的变量,函数或者代码块一旦结束运行,局部变量的生命周期也将结束。局部变量只有在被创建的函数或代码块内有效。例如在下面的实例中,演示了局部变量只能在定义的函数或者代码块内使用的过程。

文件file01.py的具体实现代码如下所示。

在上述代码中定义了函数fun(),在函数fun()中定义了一个局部变量local_var,并将变量local_var赋值为“100”。局部变量local_var只在函数fun()内有效,只能被函数fun()访问。即使是在文件file01.py中定义的函数fun2()也不能使用local_var。
执行文件file01.py后会出错,执行结果如图2-3所示。

图2-3 执行结果
而在另外一个实例文件file02.py中,虽然用import语句导入了文件file01.py中的功能,但是因为变量local_var是一个局部变量,所以不能在文件file02.py中起作用。实例文件file02.py的具体实现代码如下所示。

2.5.3 全局变量
在Python程序中,在函数外面定义的变量叫作全局变量。全局变量能够被不同的函数、类或文件所共享使用,可以被文件内的任何函数和外部文件所访问。

实例文件quan.py的具体实现代码如下所示。

在上述代码中,在函数外部分别定义了2个全局变量g_num1和g_num2,并分别设置初始值为“1”和“2”。在函数add_num()内部使用了全局变量g_num1,在使用时用到了关键字global。
①在调用函数add_num()时,result为局部变量,执行后会输出“4”。
②在调用函数sub_num()时,result为局部变量,执行后会输出“2”。
③在执行add_num()函数时,使用关键字global改变了全局变量g_num1的值,执行后会输出“3”。
④在执行sub_num()函数时,使用关键字global改变了全局变量g_num2的值,执行后会输出“5”。
实例文件quan.py的执行结果如图2-4所示。

图2-4 执行结果