变量
变量的作用域(变量的有效范围)
分类:
全局变量:在函数内外都有效的变量就是全局变量(使用global关键字声明)
局部变量:仅仅在函数内部有效的变量就是局部变量
举个例子,就像做手术时候用的麻醉:
全身麻醉:相当于全局变量
局部麻醉:相当于局部变量
全局变量(特征):
globals()
获取当前位置的全部全局变量。
1.在函数外部可以正常访问
2.在函数内部也可以正常访问
局部变量(特征):
locals()
获取当前作用域的变量(在局部中,是获取locals()之前的所有变量)
1.在函数外部不可以访问
2.在函数内部可以访问
将局部变量提升为全局变量:
在函数内部使用global关键字可以将局部变量提升为全局变量。
def func():
global
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
= "局部变量"
def do_nonlocal():
nonlocal spam
spam
= "nonlocal 变量"
def do_global():
global spam
spam
= "global 变量"
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变量,你答对了吗