变量的作用域
参考链接:https://blog.csdn.net/xCyansun/article/details/79672634
变量修饰符
-
global
表示为该变量为
全局变量
,任何位置都可以使用。在最外层定义的变量,默认为全局变量。注意:
-
无需定义,在局部中可以使用全局变量
这里有一点特别注意:
def func(): x ='hello func' print ('func1',x,id(x)) def ifunc(): print ('ifunc',x,id(x)) ifunc () print ('func2',x,id(x)) x ='hello main' print ('mainl',x id(x)) func () print('main2 id(x))
main1 hello main 49467440
func1 hello func 48975600
ifunc hello func 48975600
func2 hello func 48975600
main2 hello main 49467440
我们注意到:嵌套函数里面的变量优先继承其外部的函数域的值,而不是全局变量的值。即:嵌套内部的未独自定义的变量优先继承其上一层作用域的变量
-
若是局部定义了和全局变量相同名称的变量,在局部默认使用的局部变量,且改变局部变量的值,不会对全局变量造成影响
-
若是使用了global修饰,那么就是在使用全局变量,在局部空间修改会对全局变量造成影响
注意:
global num # 一定是先定义再使用,不能够global num = 100 num = 1000
-
-
nonlocal
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量
举例:
def fun_out(): x = 100 def fun_in(): nonlocal x #使用的是上一层中的变量 print(x)
注意:
nonlocal关键字只能用于嵌套函数中,且如果上一级函数中不存在该局部变量,nonlocal位置会报错