学海泛舟

python闭包.md

这篇文章主要是简单了解一下python中的闭包。

闭包包含自由(未绑定到特定对象)变量;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。

​ 百度百科

简单的说,函数可以引用自己所处作用域的自由变量,并且被引用的自由变量将与这个函数共同存在。

1
2
3
4
5
6
7
8
def test():
i = '你好'
def testtest(name):
print(i+','+name)
return testtest
mytest = test()
mytest('小明')

其结果为 你好,小明,可以看到test中i的生命周期得到了延长。

这种内部函数访问外部函数变量,就是闭包。

但是在使用闭包的过程中要特别注意谨慎使用外部函数的循环变量,否则容易出现错误。

1
2
3
4
5
6
7
8
9
def test():
arr = []
for i in range(1,3):
arr.append(lambda x: x+i)
return arr
ans = test()
print(ans[0](1))
print(ans[1](1))

其结果均为3,这是因为函数没有立即执行,而是到了ans[0](1)时才调用,而这个时候i已经变成了2,所以最终这两个答案都是3。