全局变量:在所有函数之外赋值的变量,是全局变量。
局部变量:在函数内的变量是,局部变量
一个函数被调用时,就创建了一个局部作用域。在这个函数内赋值的所有变量,
存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了,这些变量就
丢失了。下次调用这个函数,局部变量不会记得该函数上次被调用时它们保存的值。
作用域很重要,理由如下:
- 全局作用域中的代码不能使用任何局部变量;
- 但是,局部作用域可以访问全局变量;
- 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
- 如果在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名为 spam 的局部变量,和一个名为 spam 的全局变量。
注意:
1、局部变量不能在全局作用域内使用
2、局部作用域不能使用其他局部作用域内的变量(不是嵌套)
3、全局变量可以在局部作用域中读取
函数嵌套:
1 a = 1# 全局变量 2 def func(): 3 print(a)#这a,因函数内部没有变量,使用全局的变量 4 def func1(): 5 a = 2 6 print(a)#a,因函数内部有自己的变量,使用自己的变量 7 def func2(): 8 print(a)#函数内没有自己的变量,使用上一层的变量,如果上一层也没有,继续上一层找。 9 return func2() 10 return func1() 11 print(a) 12 func() 13 #输出1,1,2,2。
4、global , nonlocal 关键字
global:如果需要在一个函数内修改全局变量,就使用 global 语句。如果在函数的顶部有 global a 这样的代码,它就告诉 Python,“在这个函数中,a 指的是全局变量,所以不要用这个名字创建一个局部变量。
nonlocal:内层函数改变外层函数变量用nonlocal, nonlocal不能定义新的外层函数变量,只能改变已有的外层函数变量同时nonlocal不能改变全局变量。
a = 1# 全局变量 def func(): global a #声明我要改变全局变量的 a 了, a = 5 print(a) def func1(): a = 2 print(a)# 还使用自己的变量 def func2(): nonlocal a # 改变上一层的变量 a = 3 print(a) def func3(): print(a) return func3() return func2() return func1() print(a) func() #输出,1,5,2,3,3
备注:函数变量,如果函数再没有调用的时候,是没用,只是加载。