本遍文章对global关键字和nonlocal关键字进行补充,这两个关键字在以后做python开发的时候,能不用尽量别用!最好别用!总会出现让你意想不到的后果...
1.先说第一种global,不管在任何作用域下,只要是使用global声明的变量,都会变为全局变量。
直接上例子。
首先是不使用global声明变量。
x = 1
def f1():
x = "suhaozhi"
print x
def f2():
x = "hamasakiayumi"
print x
f1()
>>> suhaozhi
f2()
>>> hamasakiayumi
print x
>>>1
函数查找变量的默认规则就是,先找函数内部,当本层函数内部没有这个变量,才会去外部作用域去一层一层去找,一直找到全局作用域,如果在本层找到了,就以本层内部的变量为准,上面的例子就很好的印证了这一点。
当使用了global声明变量为全局变量后,函数中的内部变量就会变为全局变量,如果变量名相同,甚至可以改变全局变量。
x = 1
def f1():
global x
x = "suhaozhi"
print x
def f2():
x = "hamasakiayumi"
print x
f1()
>>>suhaozhi
f2()
>>>hamasakiayumi
print x
>>>suhaozhi
#在最后可以看到,全局变量x的值被f1函数改变了,原来x = 1,现在x = “suhaozhi”。
2.nonlocal 修改(覆盖)上层函数的变量。注意!!!这种nonlocal声明在python2.x版本是不支持的!!!只有python3以上才支持。
def f1():
x = 1
print (x)
def f2():
nonlocal x
x = 2
print (x)
f2()
print (x)
f1()
>>>1
2
2
f2函数中的x变量替换掉了f1函数中的x变量。
本文出自 “reBiRTH” 博客,请务必保留此出处http://suhaozhi.blog.51cto.com/7272298/1907649
3.关于作用域知识的额外补充global和nonlocal关键字
原文地址:http://suhaozhi.blog.51cto.com/7272298/1907649