很多初学者对于全局变量和局部变量辨识不清,我在学习的过程也遇到这个思维理解问题,这篇文章有助于你理清思维,网上虽然有很多类似的文章贴,但小白可能更懂小白哦.
#关于全局变量
a = 0
def A():
global a #将 A 函数内的 a 声明为全局变量
a +=1 #如果不声明,系统⽆法判断第二个 a 是全 的还是局部的,导致程序运行报错 。
print(a)
A()
print(a)
#当函数内外部都有相同的变量(名)存在时,代码执行的时候会优先选择函数内部定义的变量进行调用。只有当内部变量也是用global声明时,才能调用正确。
[out]
1
1
当函数内外部都有相同的变量(名)存在时,代码执行的时候会优先选择函数内部定义的变量进行调用。只有当内部变量也是用global声明时,才能调用正确。
num = 10
# 定义一个函数
def my_func1():
num = 30
# 定义一个变量
# 局部变量(定义在函数内部的变量就叫做局部变量)
# 局部变量的作用域(使用范围)是在函数的内部
# 局部变量 内存使用时调用函数执行改行代码
print('func1的运算结果是{}'.format(num))#调用全局变量
# 当执行完第14行标识这函数执行完成 也就是会把变量内存释放
def my_func2():
global num
# 标识下函数内部的num不是一个局部变量 而是对全局变量重新赋值
num = 20 #运算使用局部变量
# 函数运算结果可以对全局变量的值进行修改
print('func2的运算结果是{}'.format(num))
print('未进行函数计算,直接取第一行{}'.format(num))
print("------")
my_func1()
print('先运行func1计算完毕,num赋值内存清空,仍直接取第一行{}'.format(num))
print("------")
my_func2()
print('经过了func2运算,因为定义了全局变量,所以数值改变为{}'.format(num))
print("------")
my_func1()
print('再次运行func1计算完毕,但num取值是接着func2的函数,所以取值按func2的{}'.format(num))
[out]
未进行函数计算,直接取第一行10
------
func1的运算结果是30
先运行func1计算完毕,num赋值内存清空,仍直接取第一行10
------
func2的运算结果是20
经过了func2运算,因为定义了全局变量,所以数值改变为20
------
func1的运算结果是30
再次运行func1计算完毕,但num取值是接着func2的函数,所以取值按func2的20
最后总结一下本文的知识点.
== 划重点敲黑板啦 ==
关于全局变量与局部变量
- 在函数的内部使用一个变量
- 遵循一个规则: 先在函数内部找 找到直接使用 如果找不到到函数外部找 如果还是找不到就会报错(由内到外)
- 函数内部对全局变量的值进行修改 global
- 标识下函数内部的num不是一个局部变量 而是对全局变量重新赋值
- 可以对全局变量的值进行修改
- 小甲鱼建议不到万不得已不要使用全局变量.
- 简洁的概括为:a) 代码可读性变差 b) 代码安全性降低