python 闭包

什么是闭包:

  闭包是指引用了此函数外部的变量的函数

  注:

     在本质上,闭包是将内部嵌套函数和函数外部的执行环境绑定在一起的对象

  闭包必须满足三个条件:

    1. 必须有一个内嵌函数

    2. 内嵌函数必须引用外部函数中的变量

    3. 外部函数返回值必须是内嵌函数

  优点:

    【1】闭包可以根据外部作用域的局部变量来得到不同的结果(可以把多参数的函数变成单参数的函数),

        这有点像一种类似配置功能的作用,我们可以修改外部的变量,闭包根据这个变量展现出不同的功能

    【2】避免使用全局变量,减少错误。当项目比较大时,使用全局变量容易出现错误。

 

In [5]: def get_fx(a, b, c):
   ...:     def fx(x):
   ...:         return a * x ** 2 + b * x + c
   ...:     return fx
   ...:
   ...: f123 = get_fx(1, 2, 3)
   ...: print(f123(20))
   ...: print(f123(50))
   ...:
   ...: f654 = get_fx(6,5,4)
   ...: print(f654(10))
   ...: print(f654(30))
   ...:
443
2603
654
5554

In [6]: def make_power(y):
   ...:     def fn(arg):
   ...:         return arg ** y
   ...:     return fn
   ...:
   ...:
   ...: pow2 = make_power(2)  # 请问pow2绑定的是什么?
   ...: print('5的平方是:', pow2(5))
   ...:
   ...: # 求1**2 + 2 ** 2 + 3 ** 2 + .... 100 ** 2
   ...: print(sum(map(lambda x: x ** 2, range(1, 101))))
   ...: print(sum(map(make_power(2), range(1, 101))))
   ...:
   ...: print("1 ** 3 + 2**3 + ...... + 100 ** 3=")
   ...: print(sum(map(lambda x: x ** 3, range(1, 101))))
   ...: print(sum(map(make_power(3), range(1, 101))))
   ...: # print(sum(map(lambda x: x ** 3, range(1, 101))))
5的平方是: 25
338350
338350
1 ** 3 + 2**3 + ...... + 100 ** 3=
25502500
25502500

In [7]:

 

 

 

 

posted @ 2020-12-19 16:39  昱成  阅读(114)  评论(0编辑  收藏  举报