Python 中 global、nonlocal的使用

1.在学习python过程中很重要的一点需要记住:如果在函数内部定义了跟全局变量同名的变量,那么该变量将是局部变量,而全局变量的引用在该函数范围内将失效。

x = 9
def a():
    x = 10
    print x   #x在此处是局部变量。 
a()    #10,
x =9 
def b():
    x +=1
    print x #x在此处是局部变量,全局变量的引用失效,所以会报变量在使用前没有赋值的错误。

b()  #UnboundLocalError: local variable 'x' referenced before assignment

2. 使用global关键字,将函数内部的变量声明为全局变量。

X=88
def a():
    global X
    X +=1
    print X

a() #89
X=88
def b():
    global Y
    Y +=X
    print Y

b() #UnboundLocalError: local variable 'state' referenced before assignment
def b():
    global Y
    Y = 9
    print Y

b() # 9

即,全局变量也可以在函数内部声明。

3.nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量 (python 3.0 添加)

def make_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter

 nonlocal 必须声明在外一层的def中,其他任何地方将会报错。

原文地址:https://www.cnblogs.com/kfx2007/p/3520252.html