zoukankan      html  css  js  c++  java
  • 无参装饰器以及装饰器语法糖

    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
  • 相关阅读:
    ie6不支持label
    IE6下li会继承ul属性的bug、产生条件、解决办法
    玉树地震与汶川地震
    IE6给png图片添加透明级别
    使用Float布局容器高度出错的决办法
    CSS冒泡窗口,有机会改成js的
    沁园春《房》
    乱接电话的笑话~
    禁止使用英文及其缩写?
    jQuery
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10038858.html
Copyright © 2011-2022 走看看