闭包:是由函数及其相关应用环境组合而成的实体(函数+引用环境)
在嵌套函数中中,如果一个内部函数对外部函数(非全局作用域)中的变量进行引用,内部函数被认为是闭包
闭包中不能修改外部环境的变量中的值
def foo(): m = 1 def bar(): m = 0 print(m) print(m) bar() print(m) foo() 1 0 1
闭包经典错误
def foo(): a = 1 def bar(): a = a + 1 return a return bar
UnboundLocalError: local variable 'a' referenced before assignment 在赋值之前引用的局部变量'a'
错误原因:python函数中如果出先内部作用域和外部作用域变量冲突,先在内部作用域找,找不见时向外找,而bar函数中对a进行重新赋值,但赋值时又使用内部作用域没有的值,故出现次错误,要想解决可以使用类似list此类容器