python中的全局变量和局部变量以及可变数据类型
程序员文章站
2024-01-23 14:07:40
...
全局变量和局部变量
一、局部变量:在函数内部定义的变量,叫局部变量
- 当这个函数被调用的时候,这个变量存在,当这个函数执行完成之后,因为函数都已经结束了,所有函数里面定义的变量也就结束了
- 在一个函数中定义的局部变量,只能在这个函数中使用,不能再其他的函数中使用
二、全局变量:子函数外边定的变量,叫做全局变量
- 所有的函数都可以使用它的值
- 如果函数需要修改全局变量的值,那么需要在这个函数中,使用 global xxx进行说明。
如:
age = 18
def A():
age = 100
print(age)
def B():
global age
age = 200
print(age)
def C():
print(age)
A()
B()
C()
输出结果为
100
200
200
但并不是所有的全局变量在函数中使用时都需要global声明。这里就要说说朋友python中所谓的“可变数据类型”和“不可变数据类型”。
可变数据类型
首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型。
- 可变数据类型,值可以改变:列表list和字典dict;
- 不可变数据类型,值不可以改变:整型int、浮点型float、字符串型string和元组tuple。
具体什么原理这里不做解释,只说一下可变数据类型和不可变数据类型作为变量的不同用法。
当不可变数据类型作为全局变量时,需要global声明,而可变数据类型就不一定。先来看一段代码:
test = []
def D():
test.append(1)
print(test)
D()
输出结果为:
[1]
在程序中,列表test为全局变量,但在函数D中,没有global声明,就能改变,注意此时用的是.append添加值。
再来看一段代码:
test1 = []
def E():
test1 = [1,2]
print(test1)
E()
print(test1)
输出结果为:
[1, 2]
[]
可以看出,test1的内容并没有改变,仍然是空,这是为什么呢?
还有:
test2 = [1,2]
def F(a):
a += a
print(a)
F(test2)
print(test2)
结果为:
[1, 2, 1, 2]
[1, 2, 1, 2]
这时,test2又被改变了。为什么会这样呢?这就牵扯到引用的问题了。
所以我觉得为了保险起见,不管是不是可变数据类型,只要作为全局变量,最好还是加上global声明。
上一篇: 定时重复执行php程序
下一篇: PHP学习时间完整表_PHP教程
推荐阅读