zoukankan      html  css  js  c++  java
  • 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'))
  • 相关阅读:
    实践2.2 内核模块编译
    Linux及安全课程——相关链接总结
    20135202闫佳歆--week 9 期中总结
    20135202闫佳歆--week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程--实验及总结
    20135202闫佳歆--week 8 课本第4章学习笔记
    20135202闫佳歆--week 7 深入理解计算机系统第七章--读书笔记
    20135202闫佳歆--week 8 进程的切换和系统的一般执行过程--学习笔记
    20135202闫佳歆--week 7 Linux内核如何装载和启动一个可执行程序--实验及总结
    laravel open_basedir restriction in effect
    workerman wss net::ERR_SSL_PROTOCOL_ERROR
  • 原文地址:https://www.cnblogs.com/-li926/p/9483685.html
Copyright © 2011-2022 走看看