课上总结
一.第一类对象
1.什么是第一类对象?
在创建一个函数的时候,这个函数就是第一类对象,函数对象可以向变量一样进行赋值操作,还可以作为列表的元素一样使用. 第一类对象 -> 函数名 -> 变量名
比如:
def func(): print("我叫第一类对象") a = func print(a) #<function func at 0x00000000004C1E18> #打印的是内存地址 a() # 我叫第一类对象 #函数名可以进行赋值 func = 666 print(func) ###坑### 结果还是666,这里的func被赋值给666
2.函数名可以放在一个列表里多次调用
def func1(): print("朱元璋") def func2(): print("朱祁镇") def func3(): print("王阳明") def func4(): print("魏忠贤") lst = [func1,func2,func3,func4] lst[0]() #结果:朱元璋 #单个函数调用 for i in lst: i() #结果: #用for循环实现多个函数调用 朱元璋 朱祁镇 王阳明 魏忠贤
3.在外面调用内部函数
def warpper(): def inner(): print("哈哈哈") return inner #return返回给上一级的调用者warpper, inner后面不能加括号"()",这样的话函数没有返回值默认返回None,而且还是只能通过外层函数才能调用 ret = warpper()() #结果:哈哈哈 #后面两个括号代表,执行inner函数返回给warpper函数的函数名,让warpper可以在外面直接调用嵌套的函数
4.函数可以作为"实参"多次调用,作为一个代理来使用,有点类似于装饰器的雏形.
def func1(): print("谢晋") def func2(): print("朱元璋") def func3(): print("朱友文") #定义一个函数作为代理来使用,实现函数可以作为是 "实参" 多次调用. def proxy(a): print("我是代理") a() print("代理执行完毕") proxy(func1) proxy(func2) proxy(func3) #结果 我是代理 谢晋 代理执行完毕 我是代理 朱元璋 代理执行完毕 我是代理 朱友文 代理执行完毕
二.闭 包
1.什么是闭包?
闭包就是内层函数对外层函数的使用.
2.闭包的优点:
保护变量不被侵害
让变量常驻内存,方便下次调用,能够更快的展示
闭包的缺点:
如果内存过大,可能导致内存溢出,或者内存被撑爆.
3.闭包的应用场景:
目前已知爬虫,可以把一个url放入一个变量内,下次访问这个url时就会走本地缓存,快速访问.
例:
图