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

    无参装饰器的简单实现
    '''
    装饰器:修饰别人的工具 修饰 添加功能 工具指的是函数
    装饰器本身是任何可调用对象,被修饰的对象也可以是任何可调用对象
    为什么要用装饰器
    开放封闭原则
    对修改是封闭的 对扩展是开放的
    装饰器就是为了不修改被修饰对象的源代码以及调用方式的前提下,为其增加新功能

    '''

    # import time
    #
    # def timmer(func):
    # def wrappper():
    # start_time = time.time()
    # func()
    # stop_time = time.time()
    # print('run time is %s' %(stop_time-start_time))
    # return wrappper
    #
    # @timmer
    # def index():
    # time.sleep(3)
    # print('welcome to beijing')
    # index()

    #这个@timmer 就会让index作为参数带入timmer,那么func就是index
    装饰器的流程分析及修订
    #debug分析一下
    # import time
    #
    # def timmer(func):
    # def wrappper():
    # start_time = time.time()
    # func()
    # stop_time = time.time()
    # print('run time is %s' %(stop_time-start_time))
    # return wrappper
    #
    # @timmer
    # def index():
    # time.sleep(3)
    # print('welcome to beijing')
    # index()

    #修订
    import time

    def timmer(func):
    def wrappper(*args,**kwargs): #这样的话就可以接受任何值了,既可以修饰无参也可以修饰有参
    start_time = time.time()
    func(*args,**kwargs)#
    stop_time = time.time()
    print('run time is %s' %(stop_time-start_time))
    return wrappper
    #
    @timmer
    def index():
    time.sleep(3)
    print('welcome to beijing')
    return 1
    res = index()
    print(res)
    #
    @timmer
    def foo(name):
    print('from foo')
    foo('alex')
    
    
    ##########有参装饰器#####################
    #使用装饰器的时候,添加参数
    import time
    def timmer(func):
    def wrappper(*args,**kwargs):
    start_time = time.time()
    func(*args,**kwargs)#
    stop_time = time.time()
    print('run time is %s' %(stop_time-start_time))
    return wrappper
    #

    login_user = {'name':None,'status':False}

    def auth(driver='file'):
    def auth2(func):
    def wrapper(*args,**kwargs):
    if driver=='file':
    if login_user['name'] and login_user['status']:
    res = func(*args, **kwargs)
    return res
    else:
    name = input('name>>:')
    pwd = input('pwd>>>:')
    if name == 'alex' and pwd == '123':
    login_user['name']= 'alex'
    login_user['status'] = True
    res=func(*args,**kwargs)
    return res
    else:
    print('wrong login')
    elif driver=='ldap':
    print('from ldap')
    elif driver == 'db':
    
    
    #装饰器  修饰的是自己自己正下方的对象
    #添加多个装饰器的话 装饰器的顺序 影响
     
  • 相关阅读:
    [单调栈] Jzoj P4260 最大子矩阵
    [前缀和] Jzoj P4259 矩形
    [欧拉回路][状压dp] Jzoj P3290 吃货JYY
    [组合数][枚举] Jzoj P3332 棋盘游戏
    [欧拉函数][dp][快速幂] Jzoj P1161 机器人M号
    [exgcd] Jzoj P1158 荒岛野人
    [带权并查集] Jzoj P1503 体育场
    [dfs][树的直径] Jzoj P1737 删边
    [差分][倍增lca][tarjan] Jzoj P3325 压力
    [dfs] Jzoj P1497 景点中心
  • 原文地址:https://www.cnblogs.com/lazyball/p/6916640.html
Copyright © 2011-2022 走看看