• day12——闭包,装饰器,迭代器


    1,函数名的应用(第一类对象)
    函数名就是变量名,函数名的命名规范和变量一样
    直接打印函数名不加括号就是打印函数的内存地址
    函数名可以作为参数传递给参数

    闭包
      内层函数中访问外层函数的变量
    作用:
    1,保护自己的变量不受侵害,变量不对外开放
    2,可以让一个变量常驻内存
    写法:
    def outer():
    a = 10
    def inner():
    print(a)
    return inner

    查看函数是否是闭包:
    __closure__ 打印出来是None就不是闭包,打印出来东西了就是闭包


    装饰器
    # import time
    # def func1():#6,执行func1函数
    #     print('in func1')#7,打印这里
    # def timer(func):#2,执行timer函数   func== func1
    #     def inner():#5执行inner函数
    #         start = time.time()
    #         func()   #5,看第二步,func() == func1(),调用func1
    #         print(time.time() - start) #8,继续执行这里,游戏结束
    #     return inner#3,返回inner给调用者
    #
    # func1 = timer(func1)#1,调用timer()函数,func1传给func
    # func1()#4,接收返回的inner  func1() == inner()  调用inner

    语法糖
    # import time
    # def timer(func):#  2执行timer函数  func== func1
    #     def inner():    # 5,执行inner函数
    #         start = time.time()
    #         func()      #6,func()==func1()调用func1
    #         print(time.time() - start)#9,打印
    #     return inner#3,返回inner---func1 == inner
    #
    # @timer   #1,func1 = timer(func1)调用timer函数,传参
    # def func1():#7,执行func1函数
    #     print('in func1') ##--8 打印
    #
    # func1()  # 4,func1()==inner()调用inner函数


    带参数的装饰器
    # import time
    # def timer(func):   # 2,func = func1
    #     def inner(a):# 5,inner(1)
    #         start = time.time()
    #         func(a)#6,func(1)== func1(1)调用func1函数
    #         print(time.time()-start)# 8,打印这里
    #     return inner #3,返回inner   func1 = inner
    #
    # @timer  # 1,func1 == timer(func1)
    # def func1(a):
    #     print(a)#7,打印print(1)
    # func1(1) #4,func1(1) == inner(1)

    ***装饰器——成功hold住所有函数传参
    # import time
    # def timer(func):   #2 ,func == func1    /    6, func == func2
    #     def inner(*args,**kwargs):
    #         start = time.time()
    #         re = func(*args,**kwargs)  #10,func()==func1()调用 / 15,func()== func2()调用
    #         print(time.time() - start)#12  打印时间  /  18  打印时间
    #         return re   #13 返回re     /19 返回re
    #     return inner  # 3,inner == func1   7, inner == func2
    # @timer   # 1,func1 == timer(func1)             /  4, func1 == inner
    # def func1(a,b):
    #     print('in func1')#11,打印
    # @timer  # 5,func2 == timer(func2)      /  8, func2 == inner
    # def func2(a):
    #     print('in func2 and get a:%s'%(a)) #16 打印
    #     return 'func2 over'#17,返回‘fun2 over’给最后一行调用者
    #
    # func1('aaaaa','bbbbb')   #9,func1() == inner()调用inner函数
    # print(func2('aaaaa'))
  • 相关阅读:
    模拟退火大法好
    宿命的PSS
    博客在summeroi.top上更新
    SPFA模板
    BZOJ 4551: [Tjoi2016&Heoi2016]树
    BZOJ 4152: [AMPPZ2014]The Captain
    BZOJ 3930: [CQOI2015]选数
    BZOJ 3875: [Ahoi2014&Jsoi2014]骑士游戏
    BZOJ4318: OSU!
    BZOJ3170: [Tjoi 2013]松鼠聚会
  • 原文地址:https://www.cnblogs.com/-li926/p/9483685.html
Copyright © 2020-2023  润新知