python 理解闭包

标签: python3基础

 

闭包的定义


闭包:内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为
闭包。


 

 

def out_function(num):
    print('---1---')

    def in_function():
        print(num+100)
        print('---2---')

    print('---3---')
    return in_function


out_function(100)

运行结果:

---1---
---3---

效果不言而喻了吧,里面的函数没有执行。num参数似乎毫无作用对吧。图解:

橙色部分不执行,是因为仅仅定义函数。只要非调用,定义函数是不会运行结果的。那你return in_function这句话怎么解释呢,这句话仅仅只是表示“返回引用的对象,即内部的函数体”

 

怎么打印内部函数呢:

def out_function(num):
    print('---1---')

    def in_function():
        print(num+100)
        print('---2---')

    print('---3---')
    return in_function


in_result=out_function(100)
in_result()

运行结果:

---1---
---3---
200
---2---

解释,这个时候num参数起作用了,图解:

箭头1:得到了内部的函数体

箭头2:把得到的结果用in_result 变量保存了,严格来说是in_result指向了内部函数体的引用

in_result() 表示 调用内部函数,就好比out_function(100)()  ,把out_function(100)看成个整体

 

给内部函数传参:

def out_function(num):
    def in_function(num2):
        print(num+num2)

    return in_function


in_result=out_function(100)
in_result(100)
in_result(200)
in_result(300)

运行结果:

200
300
400

明白了吧,感觉像绕了个大弯。。。。这不费劲吗?虽然刚开始费劲,但是后面调用的时候方便。

假设你要设计一个员工号码是 公司id+身份证。公司id不变,变的是身份证。就可以利用闭包。

闭包这样写法好像不优美,有没有更方便的方法呢?有,就是装饰器。。请看下篇

 

版权声明:本文为doris_9800原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/doris_9800/article/details/105197530