zoukankan      html  css  js  c++  java
  • day14总结

    装饰器

    """
    1、什么是装饰器
    器指的是工具/功能
    装饰指的是为被装饰对象添加额外的功能

    大白话:定义装饰器就是定义了一个函数,该函数就是用来为其他函数添加额外的功能的

    2、为何要用装饰器
    程序的开发需要遵循一个原则:开放封闭原则
    开放:指的是对拓展功能开放
    封闭:指的是对修改源代码封闭

    装饰器就是在不修改被装饰对象源代码以及调用方式的前提为被装饰对象添加上新功能

    3、如何用装饰器

    """
    # 1、装饰器初探
    '''
    import time


    def index(x, y):
    time.sleep(3)
    print('index===>', x, y)


    # index(1,2)


    def home(name):
    time.sleep(2)
    print('home====>', name)


    # home("egon")

    def outter():
    x = index

    def wrapper(a, b):
    start_time = time.time()
    x(a, b)
    stop_time = time.time()
    print("run time is :%s" % (stop_time - start_time))

    return wrapper # 千万不要加括号


    index = outter() # f=wrapper

    index(1, 2) # wrapper()
    '''

    # 2、装饰器改进1
    """
    import time


    def index(x, y):
    time.sleep(3)
    print('index===>', x, y)

    def home(name):
    time.sleep(2)
    print('home====>', name)

    def outter(x):
    # x = home
    def wrapper(*args,**kargs):
    start_time = time.time()
    x(*args,**kargs) # x("egon")
    stop_time = time.time()
    print("run time is :%s" % (stop_time - start_time))
    return wrapper # 千万不要加括号

    index = outter(index) # index=wrapper
    home = outter(home) # home=wrapper


    index(1, 2) # wrapper(1,2)
    home("egon") # wrapper("egon")
    """

    # 3、装饰器改进2
    """
    import time


    def index(x, y):
    time.sleep(3)
    print('index===>', x, y)
    return 456

    def home(name):
    time.sleep(2)
    print('home====>', name)
    return 123


    def outter(x):
    # x = home
    def wrapper(*args, **kargs):
    start_time = time.time()
    res = x(*args, **kargs) # x("egon")
    stop_time = time.time()
    print("run time is :%s" % (stop_time - start_time))
    return res
    return wrapper # 千万不要加括号

    index = outter(index) # index=wrapper
    home = outter(home) # home=wrapper

    res1 = index(1, 2) # wrapper(1,2)
    res2 = home("egon") # wrapper("egon")
    print("====>",res1)
    print("====>",res2)

    """



    装饰器语法糖

    # 4、语法糖
    """
    import time

    def outter(x):
    # x = home
    def wrapper(*args, **kargs):
    start_time = time.time()
    res = x(*args, **kargs) # x("egon")
    stop_time = time.time()
    print("run time is :%s" % (stop_time - start_time))
    return res

    return wrapper # 千万不要加括号


    @outter # index = outter(index) # index=wrapper
    def index(x, y):
    time.sleep(3)
    print('index===>', x, y)
    return 456


    @outter # home = outter(home) # home=wrapper
    def home(name):
    time.sleep(2)
    print('home====>', name)
    return 123


    res1 = index(1, 2) # wrapper(1,2)
    res2 = home("egon") # wrapper("egon")
    print("====>", res1)
    print("====>", res2)
    """
    import time

    # 5、装饰器的模板
    """
    def outter(func):
    def wrapper(*args, **kwargs):
    res = func(*args, **kwargs)
    return res
    return wrapper

    def timmer(func):
    def wrapper(*args, **kwargs):
    start=time.time()
    res = func(*args, **kwargs)
    stop=time.time()
    print(stop -start)
    return res
    return wrapper

    def auth(func):
    def wrapper(*args, **kwargs):
    name = input("请输入您的账号:").strip()
    pwd = input("请输入您的账号:").strip()
    if name == "egon" and pwd == "123":
    print('登录成功')
    res = func(*args, **kwargs)
    return res
    else:
    print("账号密码错误")
    return wrapper

    @auth
    def index(x, y):
    time.sleep(1)
    print('index===>', x, y)
    return 456

    @auth
    def home(name):
    time.sleep(0.5)
    print('home====>', name)
    return 123

    index(1,2)
    home("egon")
    """

    # 最完整的模板
    from functools import wraps


    def wrapper(f):
    @wraps(f)
    def inner(*args, **kwargs):
    res = f(*args, **kwargs)
    return res

    return inner

    闭包函数查看文档


    # 6、wraps
    '''
    from functools import wraps

    def timmer(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
    start=time.time()
    res = func(*args, **kwargs)
    stop=time.time()
    print(stop -start)
    return res
    # wrapper.__name__ = func.__name__
    # wrapper.__doc__ = func.__doc__
    return wrapper

    @timmer # index=timmer(index) # index=wrapper
    def index(x, y):
    """
    这是index函数的文档注释
    """
    time.sleep(1)
    print('index===>', x, y)
    return 456


    # index(1,2)
    # print(index.__name__)
    help(index)
    '''




  • 相关阅读:
    实验一报告 20135238&20135207
    第十周
    极客Web前端开发资源大荟萃#022
    一个不错的编程小挑战 没事的时候可以试试
    变形金刚的能量方块(含代码)
    Angular控制器之间的数据通信
    使用HTML5本地 Drag和Drop API(native API)
    用requestAnimationFrame优化你的javascript动画
    模板字符串
    ES6的全新特性:模板字符串
  • 原文地址:https://www.cnblogs.com/Knge/p/13160397.html
Copyright © 2011-2022 走看看