Python局域和全局变量、global的用法讲解【转】

我们通过几个例子来弄明白局域或全局变量,首先我们在函数内部和函数调用的代码中都使用同一个变量 a,将下方代码写入 /home/shiyanlou/local.py

#!/usr/bin/env python3
def change():
    a = 90
    print(a)
a = 9
print("Before the function call ", a)
print("inside change function", end=' ')
change()
print("After the function call ", a)
运行程序:

此处输入图片的描述

首先我们对 a 赋值 9,然后调用更改函数,这个函数里我们对 a 赋值 90,然后打印 a 的值。调用函数后我们再次打印 a 的值。

当我们在函数里写 a = 90 时,它实际上创建了一个新的名为 a 的局部变量,这个变量只在函数里可用,并且会在函数完成时销毁。所以即使这两个变量的名字都相同,但事实上他们并不是同一个变量。

那么如果我们先定义 a,在函数中是否可以直接使用呢?

例如下面这段代码:

#!/usr/bin/env python3
a = 9
def change():
    print(a)
change()

这段代码是没有问题的,可以直接打印输出 9。稍微改动一下:

#!/usr/bin/env python3
a = 9
def change():
    print(a)
    a = 100
change()
 

现在就会报错了:“UnboundLocalError: local variable 'a' referenced before assignment”,原因是当函数中只要用到了变量 a,并且 a 出现在表达式等于号的前面,就会被当作局部变量。当执行到 print(a) 的时候会报错,因为 a 作为函数局部变量是在 print(a)之后才定义的。

现在我们使用 global 关键字,对函数中的 a 标志为全局变量,让函数内部使用全局变量的 a,那么整个程序中出现的 a 都将是这个:

#!/usr/bin/env python3
a = 9
def change():
    global a
    print(a)
    a = 100
print("Before the function call ", a)
print("inside change function", end=' ')
change()
print("After the function call ", a)

程序中的 end=' ' 参数表示,print 打印后的结尾不用换行,而用空格。默认情况下 print 打印后会在结尾换行。

程序执行的结果,不会报错了,因为函数体内可以访问全局的变量 a

Before the function call  9
inside change function 9
After the function call  100
 

在函数内使用 global 会有什么作用呢?尝试下面的代码:

#!/usr/bin/env python3
def change():
    global a
    a = 90
    print(a)
a = 9
print("Before the function call ", a)
print("inside change function", end=' ')
change()
print("After the function call ", a)
 

程序执行的结果:

Before the function call  9
inside change function 90
After the function call  90
 

这里通过关键字 global 来告诉 a 的定义是全局的,因此在函数内部更改了 a 的值,函数外 a 的值也实际上更改了。

运行程序:

此处输入图片的描述

转自

Python3 简明教程 - 函数 - 实验楼
https://www.shiyanlou.com/courses/596/learning/?id=2043

猜你喜欢

转载自www.cnblogs.com/paul8339/p/12273613.html