- 在函数内部定义的变量为局部变量Local,只在函数内部生效
- 全局变量与局部变量可以同名,他们是在不同的空间里面,互不干扰
- 如果某个变量在局部范围内没有找到,那么就继续往上找,若一直未找到,就会报错
- 找到后你,就使用该变量,并停止寻找
- 变量查找顺序,即LEGB原则:Local->Enclosing->Global->Built-in
- 如果在函数内部定义一个与外部变量同名的变量,那么就在函数内部创建了一个新的局部变量
- 在函数内部,使用global之后,变量被明确指定为全局变量,这样就不会再定义一个新的同名的局部变量
Example 01
a=10
def myfun():
global a
a=20
print(a)
myfun()
print(a)
输出结果
20
20
Example 02
#嵌套
a="global"
def myfun():
a="enclosing"#嵌套作用域
def mynest():
nonlocal a
a="ENCLOSING"
print(a)
mynest()
print(a)
myfun()
print(a)
输出结果
ENCLOSING
ENCLOSING
global