python global和nonlocal_3.关于作用域知识的额外补充global和nonlocal关键字

本遍文章对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变量。

你可能感兴趣的:(python,global和nonlocal)