• 无参装饰器以及装饰器语法糖


    1. 什么是装饰器
    装饰器指的是为被装饰对象添加新功能的工具
    装饰器本身可以是任意可调用对象
    被装饰对象本身也可以是任意可调用对象


    2. 为何要用装饰器
    开放封闭原则:对修改封闭,对扩展开发

    装饰器的实现原则:
    1. 不能修改被装饰对象的源代码
    2. 不能修改被装饰对象的调用方式

    装饰器的目的:
    就是在遵循原则1和2的前提为被装饰对象添加新功能

    3. 如何用
    # part1
    import time

    def index():
    time.sleep(1)
    print('welcome to index page')

    def wrapper():
    start=time.time()
    func()
    stop=time.time()
    print('run time is %s' %(stop -start))

    wrapper()


    part2
    import time

    def outter(func):
    # func=最原始那个index的内存地址
    def wrapper(*args,**kwargs):
    start=time.time()
    res=func(*args,**kwargs) #最原始那个index的内存地址()
    stop=time.time()
    print('run time is %s' %(stop -start))
    return res
    return wrapper

    @outter #index=outter(index) #inex=outter(最原始那个index的内存地址) # index=wrapper的内存地址
    def index():
    time.sleep(1)
    print('welcome to index page')
    return 1234

    @outter #home=outter(home)    @加上装饰器变量名就是语法糖,如 @outter
    def home(name):
    time.sleep(1)
    print('welcome %s to home page' %name)


    res=index() #wrapper的内存地址()
    # print('返回值',res)

    home('egon')


    小练习
    import time

    def auth(func):
    # func=index
    def wrapper(*args,**kwargs):
    name=input('name>>>: ').strip()
    pwd=input('pwd>>>: ').strip()
    if name == 'egon' and pwd == '123':
    print('login successfull')
    res=func(*args,**kwargs)
    return res
    else:
    print('user or pwd error')
    return wrapper


    @auth
    def index():
    time.sleep(1)
    print('welcome to index page')
    return 1234

    index()

    无参装饰器模板
    def outter(func):
    def wrapper(*args,**kwargs):
    res=func(*args,**kwargs)
    return res
    return wrapper
  • 相关阅读:
    HDU
    P2458 [SDOI2006]保安站岗[树形dp]
    POJ 2155 Matrix[树状数组+差分]
    P1281 书的复制[二分]
    【清北学堂】广州OI学习游记
    P1736 创意吃鱼法[二维dp]
    P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
    P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]
    P1273 有线电视网[分组背包+树形dp]
    windows下安装MySQL
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10038858.html
Copyright © 2020-2023  润新知