为什么下面三个函数中的最后两个会出现异常而第一个不会?
def func(lst=[]):
def inner_func():
lst.append(10)
return lst
return inner_func()
def func2(num=10):
def inner_func():
num += 1
return num
return inner_func()
def func3(lst=[]):
def inner_func():
lst += [10]
return lst
return inner_func()
if __name__ == '__main__':
print('func:', func())
try:
print('func2:', func2())
except UnboundLocalError as e:
print('func2:', e)
try:
print('func3:', func3())
except UnboundLocalError as e:
print('func3:', e)
执行结果:
func: [10]
func2: local variable 'num' referenced before assignment
func3: local variable 'lst' referenced before assignment
python的变量作用域分为legb(随便找了一个博文你可以了解一下)
在func2和func3中你对num、lst进行了赋值操作,导致这两个变量为局部作用域,而局部变量中又没有初始值(num += 1等价为num = num + 1),所以报错。