您的位置:首页 > 编程语言 > Python开发

python中的全局变量和局部变量以及可变数据类型

2017-09-07 10:17 555 查看

全局变量和局部变量

一、局部变量:在函数内部定义的变量,叫局部变量

当这个函数被调用的时候,这个变量存在,当这个函数执行完成之后,因为函数都已经结束了,所有函数里面定义的变量也就结束了

在一个函数中定义的局部变量,只能在这个函数中使用,不能再其他的函数中使用

二、全局变量:子函数外边定的变量,叫做全局变量

所有的函数都可以使用它的值

如果函数需要修改全局变量的值,那么需要在这个函数中,使用 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又被改变了。为什么会这样呢?这就牵扯到引用的问题了。

所以我觉得为了保险
8b13
起见,不管是不是可变数据类型,只要作为全局变量,最好还是加上global声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐