文章目录
前言
学习笔记 (仅供学习使用)
一、闭包
这里闭包需要有三个条件
三个条件 , 缺一不可:
1)必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套
2)内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
3)外部函数必须返回内嵌函数——必须返回那个内部函数
def func_a(number_a):#高阶函数 , 主要目的是为了返回一个函数def fun_b(number_b):print('内嵌函数fun_b的参数是:%s---外部函数fun_a的参数是:%s'%(number_b,number_a))return number_a + number_breturn fun_bresult = func_a(10)# print(result)#
二、闭包的具体应用 1.bibao
'''闭包的应用'''def crate_line(a,b):def line(x):return a*x + breturn line#这里的line就是闭包#de到一个一元线性函数 。l1 = crate_line(1,2)l2 = crate_line(2,-3)# print(l1,l2)#
1.闭包似优化了变量 , 原来需要类对象完成的?作 , 闭包也可以完成
2.由于闭包引?了外部函数的局部变量 , 则外部函数的局部变量没有及时释放 , 消耗内存
2.闭包标识的使用
我们知道 , 函数内部函数 , 引用外部函数参数或值 , 进行内部函数运算执行 , 并不是完全返回一个函数 , 也有可能是一个在外部函数的值 , 我们还需要知道返回的函数不会立刻执行 , 而是直到调用了函数才会执行
'''2、闭包里面修改外部变量的值 。'''def test1():#c是局部变量和全局变量之间的一种变量,需要加上 , nonlocal的标识 。c = 0def add():print(c)c += 1return add# print(test1())#
3.闭包的陷井
【2.闭包nonlacal标识的使用】'''3、闭包的陷进 , 容易出错的地方 。'''def test3():func_list = []for i in range(1,4):def test4():return i**2func_list.append(test4)return func_listf1,f2,f3 = test3()print(f1(),f2(),f3())#9 9 9 这就是闭包的陷井 , test4一直到75行(就这一行)才得到调用 , 所以都为3的平方 。def test5():func_list = []for i in range(1,4):def test6(_i = i):return _i**2# 这里的_i不会随着test6的调动而改变 。_i的值是定值 。func_list.append(test6)return func_listf1,f2,f3 = test5()print(f1(),f2(),f3())#1 4 9
- 桥到底是用拼音还是译成bidge?“chegzhasaio”让外国友人很迷茫,杭州这些外语标识的标准翻译是什么? 苏州有什么世界之最英语
- 葡萄酒瓶上的获奖标识,哪个才是具有含金量的,哪个只是打酱油的 吉尼斯记录标记
- 婚姻状况有几种 婚姻状况有几种类型的标识
- 买生抽要注意什么标识,黑酱油和白酱油怎么选?
- 尼龙长袜如何诞生的?它曾是上流社会身份标识
- qq关系标识是什么意思
- 生产车间区域标识牌改善前 生产车间区域标识牌
- pl哪个国家的缩写全称 pl是哪个国家的缩写
- 啥是文献标识码 文献标识码是啥意思
- 停车场标识牌一般有六种类别它们的区别在哪里? 停车场标志图片