变量
变量的作用域(变量的有效范围)
分类:
全局变量:在函数内外都有效的变量就是全局变量(使用global关键字声明)
局部变量:仅仅在函数内部有效的变量就是局部变量
举个例子,就像做手术时候用的麻醉:
全身麻醉:相当于全局变量
局部麻醉:相当于局部变量
全局变量(特征):
globals()
获取当前位置的全部全局变量。
1.在函数外部可以正常访问
2.在函数内部也可以正常访问
局部变量(特征):
locals()
获取当前作用域的变量(在局部中,是获取locals()之前的所有变量)
1.在函数外部不可以访问
2.在函数内部可以访问
将局部变量提升为全局变量:
在函数内部使用global关键字可以将局部变量提升为全局变量。
def func():
global #变量1,变量2,...
global #提升的全局变量是真正的全局变量
global num,num2
num2 = 2
num = 1
func()
print(num)
print(num2)
真正的全局变量:
使用global关键字对全局变量进行声明才可以在函数内部任意操作,否则在函数内部只能访问,而不能修改
num = 3
def func():
global num
num = 2
print(num)
func()
print(num)
变量作用域链:
变量的有效范围可以向函数内部层层向下传递
如果其他的函数内部没有使用global,可以访问变量,无法修改
如果其他的函数中使用gloabl,可以进行任何操作
*nonlocal是在Python3.2之后引入的一个关键字,它是用在封装函数中的。
nonlocal 适用于在局部函数中的局部函数, 把内层的局部变量设置成上一个外层局部可用,但是还不是全局的。他与global可以混合使用,下面的代码示例可以分出global与nonlocal区别
def scope_test():
def do_local():
spam = "局部变量" #1
def do_nonlocal():
nonlocal spam #使用外层的spam变量
spam = "nonlocal 变量" #2
def do_global():
global spam
spam = "global 变量" #3
spam = "test spam"
do_local()
print("本地分配后:", spam)
do_nonlocal()
print("nonlocal分配后:",spam)
do_global()
print("global分配后:",spam)
scope_test()
print("全局范围:",spam)
输出的结果是:test sapm,nonlocal变量,nonlocal变量,global变量,你答对了吗