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':
    
    
    #装饰器  修饰的是自己自己正下方的对象
    #添加多个装饰器的话 装饰器的顺序 影响
     
  • 相关阅读:
    react-router-dom中的BrowserRouter和HashRouter,link与Navlink
    在React中使用react-router-dom路由
    详解react中的state,props,refs
    简单明了的vuex详解
    暂时性死区
    es6中的块级作用域
    es6的let
    前端模块化
    Web框架
    百分比布局 双飞翼布局 圣杯布局
  • 原文地址:https://www.cnblogs.com/lazyball/p/6916640.html
Copyright © 2011-2022 走看看