闭包的应用与理解

       普通函数能完成大功能编写,匿名函数能完成小功能代码编写,而且当作实参非常方便;而闭包比函数方便,拥有函数代码的功能(类似于匿名函数),还能有代码所需要使用数据;而面向对像,实例对象赋值给参数,里面的参数和方法都有,但应用中往往只要一部分,而不是全部,故闭包的优点就能体现出来,就是比面向对象更轻量,不会有多余的东西

def line(k,b):
    def create_y(x):
        print(k*x+b)
    return create_y


line_1 = line(1,2)
line_1(0)
line_1(1)
line_1(2)

line_1 = line(11,22)
line_1(0)
line_1(1)
line_1(2)

  输出内容以下:

2
3
4
22
33
44

 

代码说明:

1、line方法返回的是方法create_y的引用,并定义变更k=1,b=2,赋值给变量line_1

2、执行line_1(0)是,就相当于执行方法create_y,那0就为参数x的值

3、在create_y方法中,执行k*x+b,在当前方法找不到变量和k,b,因为当前函数是内部函数,就往外部函数找,即往上一层找,在方法line中找到k=1,b=2

4、再根据这三个参数的值计算返回值

闭包就是一个函数里面套着另一个函数的定义,一般情况内部函数的功能会用到外部函数的变量,把内部函数和用到的外部函数的变量整体称之为闭包

函数、匿名函数、闭包、对象,都作为实参时,有什么区别?

匿名函数能够完成基本的简单功能,传递是这个函数的引用,只有功能

普通函数能够完成较为复杂的功能,传递是这个函数的引用,只有功能

闭包能够将较为复杂的功能,传递是这个闭包中的函数以及数据,因为传递是功能+数据

对象能够完成最为复杂的功能,传递是很多数据+很多功能,因此传递是功能+数据

 

闭包的修改,使用nonlocal 语句

 

   



posted @ 2020-04-10 11:01  aaron616  阅读(227)  评论(0编辑  收藏  举报