zoukankan      html  css  js  c++  java
  • 装饰器

    装饰器

    开放封闭原则:

    扩展是开放的(增加新功能)

    修改源码是封闭(修改已经实现的功能)

    在不改变源码及调用方式的基础上额外增加新的功能

    装饰器

    用来装饰的工具

    版一

    import time
    start_time = time.time()
    def func():
        time.sleep(2)  #睡眠   模拟网络延迟
        print("我要飞")
    func()
    print(time.time() - start_time)
    
    start_time = time.time()
    def foo():
        time.sleep(3)
        print("我是小明,我飞的比你高")
    foo()
    print(time.time() - start_time)
    #
    我是小明,我飞的比你高
    3.0025882720947266
    

    版二

    def times(f):
        start_time = time.time()
        f()
        print(time.time() - start_time)
    def foo():
        time.sleep(3)
        print("我是小明,我飞的比你高")
    def func():
        time.sleep(1)
        print("我是叶儿,我起不来")
    s = func
    func = times
    
    s = foo
    foo = times
    foo(s)
    
    ###                    当你不懂程序的时候  debug 是个好东西
    我是小明,我飞的比你高
    3.0032668113708496
    

    版三

    ef times(f):
        def inner():
            start_time = time.time()
            f()
            print(time.time() - start_time)
        return inner
    
    def foo():
        time.sleep(1)
        print("我是立业")       
    
    foo = times(foo)
    foo()
    
    ###
    我是立业
    1.0018110275268555
    

    low版

    def wrapper(f):
        def inner(*args,**kwargs):
            start_time = time.time()
            f(*args,**kwargs)
            print(time.time() - start_time)
        return inner
    
    def func(*args,**kwargs):
        print(f"这是{args}函数,李烨还是不行")
        time.sleep(2)
    
    func = wrapper(func)
    func("alex","sur")
    

    高级

    def wrapper(f):
        def inner(*args,**kwargs):
            start_time = time.time()
            f(*args,**kwargs)
            print(time.time() - start_time)
        return inner
    @wrapper # func = wrapper(func)
    def func(*args,**kwargs):
        print(f"这是{args}函数,李烨还是不行")
        time.sleep(2)
        @wrapper  # func = wrapper(foo)
    def foo(*args,**kwargs):
        print(f"这是{args}函数,常鑫穿裙子")
        time.sleep(3)
    func = wrapper(func)
    foo = wrapper(foo)
    func("alex","sur")
    foo("alex","sur")
    
    
    ####
    
    这是('alex', 'sur')函数,李烨还是不行
    2.0036680698394775
    2.0037569999694824
    这是('alex', 'sur')函数,常鑫穿裙子
    3.0051209926605225
    3.005230188369751
    
    
    
    
    语法糖 ——— 甜

    语法糖必须放在被装饰的函数正上方

    func = wrapper(func)

    func = wrapper(foo)

    def wrapper(f):
        def inner(*args,**kwargs):
            start_time = time.time()
            ret = f(*args,**kwargs)
            print(time.time() - start_time)
            return ret
        return inner
    @wrapper
    def func(*args,**kwargs):
        print(f"这是{args}函数,李烨还是不行")
        time.sleep(2)
        return"alex"
    print(func())
    
    这是()函数,李烨还是不行
    2.00323486328125
    alex
    
    
  • 相关阅读:
    转物理老师的说说,过好自己的生活,别人的梦幻生活背后也有你看不见的无奈
    第一、二、三、BC范式的学习总结
    一位毕业四年的前辈的经历
    普里姆算法,克鲁斯卡尔算法,迪杰斯特拉算法,弗洛里德算法
    从零开始构建JavaScript框架4——DOM遍历2
    从零开始构建JavaScript框架3——DOM遍历1
    从零开始构建JavaScript框架2——总体结构以及元素的获取和创建
    从零开始构建JavaScript框架1——为何JavaScript开发需要框架
    从浏览器输入URL到页面加载完成到底发生了什么?
    第5课 C语言指针深入1
  • 原文地址:https://www.cnblogs.com/hualibokeyuan/p/11232400.html
Copyright © 2011-2022 走看看