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,就会返回(打包)一个新的闭包实例
 所以:
 闭包 = 函数 + 引用环境

  

posted @ 2017-10-18 22:12  静静别跑  阅读(196)  评论(0编辑  收藏  举报