LEGB
L:local,局部作用域,即函数中定义的变量
E:enclosing,嵌套的父集函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的
G:global,全局变量,就是模块级别定义的变量
B:built-in,系统固定模块里面的变量,比如int,bytearray等。搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块的全局>Python内置作用域,也就是LEGB
x=int(2.9) #int bulit-in g_count = 0 #global def outer(): o_count = 1 #enclosing def inner(): i_count = 2 #local print(i_count) print(o_count) inner() outer()
错误的经典案例分析
count=10 def outer(): print(count) count=5 #不能修改全局的作用域的值
下面的这个可以
count=10 def outer(): count = 9 #在内部定义一个变量是局部变量 outer()
或者修改成下面
count=10 def outer(): global count print(count) count=5 print(count)
局部变量修改的关键字
def outer1(): count = 10 def inner(): nonlocal count count=20 print(count) inner() print(count) outer1()