欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-23 14:07:40
...

全局变量和局部变量

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

  1. 当这个函数被调用的时候,这个变量存在,当这个函数执行完成之后,因为函数都已经结束了,所有函数里面定义的变量也就结束了
  2. 在一个函数中定义的局部变量,只能在这个函数中使用,不能再其他的函数中使用

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

  1. 所有的函数都可以使用它的值
  2. 如果函数需要修改全局变量的值,那么需要在这个函数中,使用 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声明。