zoukankan      html  css  js  c++  java
  • Python闭包函数

    闭包

    闭包:python中的闭包从表现形式上定义(解释)为:

      如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).

    先看一个函数:

     def func1()
         def func2()
             a = 1
             return a
         func2()
    

    因为函数内部又有嵌套函数,
    嵌套函数定义:定义在内部的函数无法在全局被调用
    所以产生了闭包问题
    什么问题?
    就是func1 拿不到func2 的变量a
    怎么才能拿到呢?
    我们知道,函数是第一类对象(第一类对象说白了你可以把函数当成变量使用),你可以把func1中的变量(func2)通过return返回

     def func1()
         def func2()
             a = 1
             return a
         return func2
     
     x = func1()    #这样就拿到了func2 并赋值给了变量x
     x()        # x()等同于 func2()      看明白了吧    就得到了以个返回值a   这样就拿到func2 的变量a了
     
     而如果:
     def func1(para1)
         para1
         def func2()
             a = 1
             return para1 + a
         return func2
     
     func1(5)    #如果把5传给func1    就会把def func2 这个函数打包,
         #注意:
                 def func2()
                     a = 1
                     return 1 + a
     func1(5)()  #等同于func2()
     #就变相调用函数func2()  得到返回值 6
     print(func1(5)())  # 6
     
     #如果func1(8),   那么func2打包后:
             def func2()
                 a = 1
                 return 8 + a
     #每次调用func1,就会返回(打包)一个新的闭包实例
     所以:
     闭包 = 函数 + 引用环境
    

      

  • 相关阅读:
    Hadoop2.x集群动态添加删除数据节点
    HDFS中块状态分析
    procedure of object(一个特殊的指针类型)
    设计模式导语一
    Delphi中的容器类(二)
    让AlphaControls改变DevExpress皮肤
    Delphi中的容器类(一)
    Delphi 的RTTI机制浅探
    重写AuthorizeAttribute实现自己的权限验证
    含有HttpContext元素的单元测试
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/8531193.html
Copyright © 2011-2022 走看看