1、四种作用域及其生命周期:
(1)local(本地局部作用域),即函数中定义的临时变量,当函数结束时,变量的生命周期结束。
(2)enclosed(闭包,嵌套的父级函数的局部作用域),即闭包外层函数的局部变量,外层函数结束,变量的生命周期结束。
(3)global(全局变量),即模块级别定义的变量,模块销毁,变量的生命周期才会结束。
(4)bulit-in(内置函数)是python解释器,虚拟机内置的变量。
搜索变量的顺序是:(1)->(2)->(3)->(4)
2、global关键字的使用
(1)未使用关键字global的情况下,全局变量在局部作用域里默认是只读的(无法修改),如果为其赋值一个新的值,python认为是在当前的局部作用域里创建一个新的“同名”变量
x = 10
def f1():
x = 20
print(x)
f1()
print(x)
"""
Output:
20
10
"""
(2)在确认使用全局变量的情况下,但是又没有关键字的情况下,如果试图修改全局变量,会报UnboundLocalError
的错误!!!
x = 10
def f1():
print(x) # 确认使用外部作用域
x = 2
#UnboundLocalError: local variable 'x' referenced before assignment
(3)当局部作用域想修改全局变量时,使用关键字global即可
x = 10
def f1():
global x
x = 20
print(x)
f1()
print(x)
"""
Output:
20
20
"""
(4)使用global声明,