• 装饰器


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

    '''

    # 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':
    
    
    #装饰器  修饰的是自己自己正下方的对象
    #添加多个装饰器的话 装饰器的顺序 影响
     
  • 相关阅读:
    .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
    C++ STL 之 set 和 pair
    C++ STL 之 list
    安卓开发之数据库事务的使用
    安卓开发之sql语句增删改查2(利用谷歌封装好的API进行增删改查)
    安卓开发之SimpleAdapter的使用
    安卓开发之ArrayAdapter使用
    安卓开发之打气筒的使用
    安卓开发之ListView入门
    安卓开发之sql语句增删改查
  • 原文地址:https://www.cnblogs.com/lazyball/p/6916640.html
Copyright © 2020-2023  润新知