python闭包的应用场景_python闭包的运用

闭包就是内层函数, 对外层函数(非全局)的变量的引⽤. 叫闭包

deffunc1():

name= "alex"

deffunc2():print(name) #闭包

func2()

func1()

结果:

alex

我们可以使⽤__closure__来检测函数是否是闭包. 使⽤函数名.__closure__返回cell就是

闭包. 返回None就不是闭包

deffunc1():

name= "alex"

deffunc2():print(name) #闭包

func2()print(func2.__closure__) #(

0x10c3fc650>,)

func1()

如何在函数外边调⽤内部函数呢?

defouter():

name= "alex"

#内部函数

definner():print(name)returninner

fn= outer() #访问外部函数, 获取到内部函数的函数地址

fn() #访问内部函数

那如果多层嵌套呢? 很简单, 只需要⼀层⼀层的往外层返回就⾏了

deffunc1():deffunc2():deffunc3():print("嘿嘿")returnfunc3returnfunc2

func1()()()

由它我们可以引出闭包的好处. 由于我们在外界可以访问内部函数. 那这个时候内部函

数访问的时间和时机就不⼀定了, 因为在外部, 我可以选择在任意的时间去访问内部函数. 这

个时候. 想⼀想. 我们之前说过, 如果⼀个函数执⾏完毕. 则这个函数中的变量以及局部命名

空间中的内容都将会被销毁. 在闭包中. 如果变量被销毁了. 那内部函数将不能正常执⾏. 所

以. python规定. 如果你在内部函数中访问了外层函数中的变量. 那么这个变量将不会消亡.

将会常驻在内存中. 也就是说. 使⽤闭包, 可以保证外层函数中的变量在内存中常驻. 这样做

有什么好处呢? 非常⼤的好处. 我们来看⼀个关于爬⾍的代码:

from urllib.request importurlopendefbut():

content= urlopen("http://www.xiaohua100.cn/index.html").read()defget_content():returncontentreturnget_content

fn= but() #这个时候就开始加载校花100的内容#后⾯需要⽤到这⾥⾯的内容就不需要在执⾏⾮常耗时的⽹络连接操作了

content = fn() #获取内容

print(content)

content2= fn() #重新获取内容

print(content2)

综上, 闭包的作⽤就是让⼀个变量能够常驻内存. 供后⾯的程序使⽤.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值