作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。
座右铭:低头赶路,敬事如仪
个人主页:b网络豆的主页
目录
前言
一.闭包
1.什么是闭包
前景引入:
2.闭包的定义需要满足以下三个条件:
总结:
前言
本章将会讲解Python编程函数的闭包。
一.闭包
1.什么是闭包
当我们在外部函数中定义了一个内部函数,并且内部函数能够读取到外部函数内的变量,这种函数我们就称为闭包。
前景引入:
def test_one():
print("---1---")
#test_one() #函数的调用
t_o = test_one()
print(id(test_one())) #140726006127832
print(id(t_o)) #t_o变量指向了test_one函数的调用 140726006127832
# t_o() 报错
2.闭包的定义需要满足以下三个条件:
- 在一个外函数中定义了一个内函数
- 内函数里运用了外函数的临时变量
- 并且外函数的返回值是内函数的引用
def test(number): #number 形参 临时变量
print("--1--")
def test_in(number_in):
print(number_in)
print("--2--")
return number_in + number
print("--3--")
return test_in
#执行完毕时 结果--1-- --3-- 并且函数里面的变量会被释放(number)
res = test(20) #res = test_in
res1 = res(25) #test in()
print(res1) #45 说明在外层函数执行完毕时,number并没有被释放,而是继续给内层函数使用。
从上自下执行,碰到test(20)执行test里面内容输出--1-- 再向下执行输出--3--,返回test_in检测到了还有内层函数,将test_in返回时将临时变量与内层函数进行了绑定,绑定后继续向下执行返回到函数调用处res ,res相当于test_in ,我们想调用内层函数使用res进行调用执行res1=res(25) 输出了25 输出了--2--,使用到了number,从而证明产生了闭包。
总结:
- 闭包它是一种现象
- 一般情况下,外函数执行完毕时,临时变量会被释放。
- 但此时,外函数发现自己的临时变量会在将来被使用,
- 所以外函数结束的时候,在返回内函数引用的同时,将外函数的临时变量与内函数进行绑定。
- 这也是为什么当外函数结束,但内函数仍然可以使用外函数临时变量的原因。
创作不易,求关注,点赞,收藏,谢谢~