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()

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

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

     

  • 相关阅读:
    并发编程-操作系统简史,多道技术
    python下的excel表格处理 内含面试题
    epoll模型的探索与实践
    nginx搭建静态网站
    面向对象基础
    python+Django 下JWT的使用
    linux的history命令
    携程apollo配置中心Quick Start
    redis哨兵
    redis的主从复制
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8405788.html
Copyright © 2011-2022 走看看