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中得到布局文件对象有三种方式
    android中的键值对
    .length()与.length与.size()
    异常处理
    Python操作Excel
    写一个简单的爬虫(博客)
    开发一个登录接口(Mysql)
    常用模块
    内置函数
    装饰器
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8405788.html
Copyright © 2011-2022 走看看