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
  • 相关阅读:
    有关tensorflow一些问题
    一个完整openlayer的例子,包括marker,popup等
    OpenLayers中的Layer概念和实践--Openlayers调用WMS服务
    MapInfo格式转arggis格式
    arcgis for server 登陆manager失败解决办法
    1752:鸡兔同笼(2.1)
    1749:数字方格(2.1)
    08:石头剪刀布(1.6)
    c++中的243、251、250错误原因
    05:年龄与疾病(1.6)
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10038858.html
Copyright © 2011-2022 走看看