同一个作用域里,只要某处对变量做了“赋值”操作(包括 =、+=、for x in …、import x 等),Python 就会把它当作局部变量,这时提前访问变量,就会报UnboundLocalError: local variable 'xxx' referenced before assignment。
在函数顶部就给变量一个默认值
def foo(flag):
result = None # 先“声明”/初始化
if flag:
result = 123
return result # 无论 flag 是真是假,result 都已绑定
用 global / nonlocal 把变量声明为外层作用域的
当函数里需要修改全局变量或闭包变量,而不是新建局部变量时,用这两个关键字
count = 0
def incr():
global count # 告诉解释器 count 不是局部变量
count += 1
def bar():
x = 10
def inner():
return x # 只读取,不赋值,不会变成 local
return inner()