• day11 装饰器


    # 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数的 万能参数的
    # 装饰器的作用
    # 原则 : 开放封闭原则
    # 语法糖
    # 装饰器的固定模式 [公式]
    
    
    # def timmer(f): # 计算函数的执行时间
    #     strat = time.time()
    #     f()
    #     end = time.time()
    #     print(end - strat)
    
    import time
    # print(time.time()) # 从1970.1.1当现在过了多少秒,获取当前时间
    # time.sleep(5) # 让程序执行到当前位置的时候 停 指定时间
    
    # def timmer(f):    #装饰器函数
    #     def inner():
    #         strat = time.time()
    #         ret = f()     #被装饰的函数
    #         end = time.time()
    #         print(end - strat)
    #         return ret
    #     return inner # 注意: !!!传内部函数名
    #
    #
    # @timmer        # 语法糖 @装饰器函数名
    # def func():     # 被装饰的函数
    #     time.sleep(0.01)
    #     print("hello boss,hello mates,hello everyone")
    #     return "新年好"
    #
    # # func = timmer(func)
    # ret = func()    # 此时的func()实际上是inner()
    # print(ret)
    
    # 装饰器的作用 ----- 不想修改函数的调用方式,但是还想在原来的函数前后添加功能
    # timmer就是一个装饰器函数, 只是对一个函数 有一些装饰作用
    
    # 原则: 开放封闭原则
    # 开放:   对扩展是开放的
    # 封闭:   对修改是封闭的
    
    # def outer():
    #     def inner():
    #         return 'inner'
    #     inner()
    # outer()
    
    
    # 装饰带参数函数的装饰器
    # def timmer(f):    #装饰器函数
    #     def inner(*args, **kwargs):
    #         strat = time.time()
    #         ret = f(*args, **kwargs)     #被装饰的函数
    #         end = time.time()
    #         print(end - strat)
    #         return ret
    #     return inner  # 注意: !!!传内部函数名
    #
    #
    #
    # @timmer        # 语法糖 @装饰器函数名
    # def func(a):     # 被装饰的函数
    #     time.sleep(0.01)
    #     print("hello boss,hello mates,hello everyone",a)
    #     return "新年好"
    #
    # @timmer        # 语法糖 @装饰器函数名
    # def func(a, b):     # 被装饰的函数
    #     time.sleep(0.01)
    #     print("hello boss,hello mates,hello everyone",a,b)
    #     return "新年好"
    #
    # # func = timmer(func)
    # ret = func(1, 2)    # 此时的func()实际上是inner()
    # ret = func(1, b=2)
    # print(ret)
    
    # def wrapper(f):    #装饰器函数, f是被装饰的函数
    #     def inner(*args, **kwargs):
    #         '''在被装饰函数之前要做的事'''
    #         ret = f(*args, **kwargs)     #被装饰的函数
    #         '''在被装饰函数之后要做的事'''
    #         return ret
    #     return inner  # 注意: !!!传内部函数名
    #
    #
    # @wrapper        # 语法糖 @装饰器函数名
    # def func(a, b):     # 被装饰的函数
    #     time.sleep(0.01)
    #     print("hello boss,hello mates,hello everyone",a,b)
    #     return "新年好"
    
    def wrapper(func):  #qqxing
        def inner(*args, **kwargs):
            ret = func(*args, **kwargs)     #被装饰的函数
            return ret
        return inner
    
    @wrapper        # <===> qqxing = wrapper(qqxing)
    def qqxing(a,b):
        print(123)
    
    ret = qqxing(1,b=[1,2]) #inner()
    print(ret)

     总结:

    复习
    讲作业
    装饰器的进阶
        functools.wraps
        带参数的装饰器
        多个装饰器装饰同一个函数
    周末作业
        文件操作
        字符串处理
        输入输出
        流程控制
    
    装饰器
    开发原则: 开放封闭原则
    装饰器的作用: 在不改变原函数的调用方式的情况下,在函数的前后添加功能
    装饰器的本质: 闭包函数
    
    def wrapper(f):
        def inner(*args, **kwargs):
            print("在被装饰的函数执行之前做的事")
            ret = f(*args, **kwargs)
            print("在被装饰的函数执行之后做的事")
            return ret
        return inner
    
    
    @wrapper
    def holiday(day):
        print('全体放假%s天'%day)
        return '好开心'
    
    ret = holiday(7)
    print(ret)
    
    def outer(*args, **kwargs):
        print(args)
        print(*args)
        def inner(*args):
            print('inner: ',args)
        inner(*args)
    
    outer(1, 2, 3, 4) # == outer(*[1,2,3,4])
    View Code
  • 相关阅读:
    halcon三种模板匹配方法
    线阵相机与面阵相机的区别
    完整性检测
    halcon读取一张照片,并转化为灰度图像
    halcon车牌的识别
    HALCON学习之条形码实时扫描
    开关引脚测量
    ip sensor芯片级解决方案
    ip camera芯片级解决方案
    Parallel For Bug in static constructor
  • 原文地址:https://www.cnblogs.com/77-is-here/p/10488905.html
Copyright © 2020-2023  润新知