Python查找一个变量时会按照“局部作用域”、“嵌套作用域”、“全局作用域”和“内置作用域”的顺序进行搜索。所谓的“内置作用域”就是Python内置的那些标识符,我们之前用过的input、print、int等都属于内置作用域。
def foo():
#此处的b为局部变量,在foo()中,b属于局部作用域
b = 'hello'
def bar():
c = True
print(a)
#对于bar()而言,b属于嵌套作用域
print(b)
print(c)
bar()
if __name__ == '__main__':
#此处的a为全局变量,属于全局作用域
a = 100
foo()
执行结果如下:
如果我们希望函数内部的函数能够修改嵌套作用域中的变量,可以使用nonlocal关键字来指示变量来自于嵌套作用域。
nonlocal作用:将局部的变量提升为嵌套局部变量
条件:必须有同名嵌套局部变量;