python global与nonlocal的区别

发布于 2020-06-19  707 次阅读


  • 两者的功能不同,global关键字修饰后标识该变量是全局变量,对该变量修改就是修改全局变量,而nonlocal关键字修饰后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该变量,nonlocal会发生位置错误。
  • 两者的使用范围不同,global关键字可以用在任何地方,即使该变量未定义也可以直接使用,nonlocal关键字只能用于嵌套函数中,并且该变量已经定义过。
x = 1
def test():
    global x #声明x为全局变量x
    x = 2
test()
print(x)

--------------
2
def make_counter(): # make_counter是个闭包
    count = 0 
    def counter(): 
        nonlocal count # 如果外层count不存在,此处会报错
        count += 1 
        return count 
    return counter 

一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。