zoukankan      html  css  js  c++  java
  • 16_Python闭包

    一、什么是闭包

    什么是闭包:内函数对外函数非全局变量的引用,并且外函数的返回值是内函数的引用(地址)。

    1 def wrapper():
    2     name = 'zhangsan'
    3     def inner():
    4         name = 'lisi'
    5     return inner
    在一个外函数中,定义了内函数,内函数中引用了外函数的局部变量,并且外函数的返回值是内函数的引用。
    一般情况下,函数运行完毕,在内存中占用的空间,将会被释放掉。
    但是闭包是一种特殊情况,如果外函数在结束的时候,发现自己的变量将来会在内部函数中被使用
    就把这个临时变量绑定给了内部函数,然后自己就结束了。
    1 def wrapper():
    2     name = 'zhangsan'
    3     def inner():
    4         name = 'lisi'
    5     return inner
    6 
    7 wrapper()
    8 print(wrapper)
    9 print(wrapper())

    如果函数名后紧跟一对括号,相当于现在我就要调用这个函数,如果不跟括号,相当于只是一个函数的名字里面存了函数所在内存中的引用

    外函数把临时变量绑定给了内函数

    1 def wrapper():
    2     name = 'zhangsan'
    3     def inner():
    4         name = 'lisi'
    5         print(name)
    6     return inner
    7 
    8 demo = wrapper() #demo 保存了 inner 的 内存地址
    9 demo()

    外函数会结束,但内函数不会被释放。

    使用闭包的过程中,一旦外函数被调用一次返回了内函数的引用,虽然每次调用内函数,是开启一个函数执行过后消亡,但是闭包变量实际上只有一份,每次开启内函数都在使用同一份闭包变量。

     

  • 相关阅读:
    Android UI之LinearLayout详解
    在zxing开源项目里,camera.setDisplayOrientation(90)出现错误
    DjangoORM获取值的不同类型
    DjangoORM操作数据库
    Django的URL写法
    创建django项目的基础命令&知识(一)
    python读取EXCEL的某一列,并保存到txt文本中
    后台管理页面基础布局HTML+CSS
    使用yaml格式进行接口测试报错
    常见的sql语句练习
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8405788.html
Copyright © 2011-2022 走看看