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]: