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':
    
    
    #装饰器  修饰的是自己自己正下方的对象
    #添加多个装饰器的话 装饰器的顺序 影响
     
  • 相关阅读:
    一致Hash算法
    Ubuntu14.04上深度学习Caffe库安装指南(CUDA7.5 + opencv3.1)
    springcloud 服务调用的两种方式
    Spring Boot学习记录(二)–thymeleaf模板
    Springmvc构造RESTful详细讲解
    pring MVC过滤器-HttpPutFormContentFilter
    Spring MVC中各个filter的用法
    Spring MVC 使用拦截器 HiddenHttpMethodFilter配置Rest风格的URL
    springmvc 入门(1)
    oracle sql语言模糊查询--通配符like的使用教程
  • 原文地址:https://www.cnblogs.com/lazyball/p/6916640.html
Copyright © 2011-2022 走看看