一:nonlocal关键字
nonlocal 用来声明外层的局部变量。
global 用来声明全局变量。
#测试nonlocal、global关键字的用法 a = 100 def outer(): b = 10 def inner(): nonlocal b #声明外部函数的局部变量 print(‘inner:b‘,b) b = 20 #内部函数中修改了外部函数变量b的值 global a #声明全局变量 a = 200 inner() print(‘outer:b‘,b) outer() print(‘a:‘,a)
运行结果:
inner:b 10
outer:b 20
a: 200
二:LEGB规则
Python在查找“名称”时,是按照LEGB规则查找的: Local-->Enclosed-->Global-->Built in
Local 指的就是函数或者类的方法内部
Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global 指的是模块中的全局变量
Built in 指的是Python为自己保留的特殊名称。
如果某个name映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域 (enclosed)进行搜索,如果闭包作用域也没有找到,Python就会到全局(global)命名空 间中进行查找,最后会在内建(built-in)命名空间搜索 (如果一个名称在所有命名空间 中都没有找到,就会产生一个NameError)。
#测试LEGB str = "global" def outer(): #str = "outer" def inner(): #str = "inner" print(str) inner() outer()
原文地址:https://www.cnblogs.com/jack-zh/p/10841693.html
时间: 2024-10-29 00:19:12