python学习之闭包

时间:2023-03-09 04:24:52
python学习之闭包

闭包:是由函数及其相关应用环境组合而成的实体(函数+引用环境)

在嵌套函数中中,如果一个内部函数对外部函数(非全局作用域)中的变量进行引用,内部函数被认为是闭包

闭包中不能修改外部环境的变量中的值

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此类容器