在python中定义和使用函数方法的时候,会遇到局部变量和全局变量,这里主要是说明什么是局部变量,什么是全局变量,以及两者之间的区别。
首先两者最大的区别就是作用域不同,也可以说是命名空间不同,简单来说就是全局变量和局部变量他两的作用范围不一样。
全局变量和局部变量的定义:全局变量是在函数外定义的变量,局部变量是在函数方法内定义的变量
例如
a=1
def func():
b=2
这里的a就是全局变量,b就是局部变量。
知道这两者的定义之后,就要去理解他两的作用域不同。
可以将这里的作用域不同主要是分为:
1、函数内可以直接访问全局变量的
例如
a=1
def func():
b=2
print(a)
func()
print(a)
添加图片注释,不超过 140 字(可选)
这里的输出是两个a的值1,这说明函数内是可以直接访问全局变量的
2、函数内不可以直接修改全局变量
a=1
def func():
b=2
a=a+1
print(a)
添加图片注释,不超过 140 字(可选)
这里就会出现报错,这个报错就是表明函数方法内可以读取但是不可以去修改全局变量。
UnboundLocalError: local variable 'a' referenced before assignment
3、函数外部不可以直接访问局部变量
a=1
def func():
b=2
print(a)
func()
print(a)
Print(b)
报错NameError: name 'b' is not defined
这就是作用域做了一个限制。但对于以上两个问题,我们可以通过global来解决,分别把a和b使用global来声明一下即可,global a,b,就不会出现报错的情况了。
a=1
def func():
global a,b
b=2
a+=1
print(a)
print(b)
这里输出的a的值是2,这也就表明了修改全局变量
4、同名的局部变量会覆盖全局变量
a=1
def func():
a=10
print(a)
func()
print(a)
这里的输出是10,1,这个时候就是局部变量,它虽然名字和全局变量是一样的,但是它有一个查找优先级,先在自己的作用域中去找,如果找到了就直接打印出来了,如果找不到的话才会去全局变量中去找,所以说只要有同名的局部变量,就会覆盖全局变量。