day 11 第一类对象、闭包、迭代器

课上总结

一.第一类对象

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时就会走本地缓存,快速访问.

例:

猜你喜欢

转载自www.cnblogs.com/yanpeizhang/p/10251703.html
今日推荐