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

    装饰器(decorator):

      1>定义: 本质是函数,功能是用来装饰其他函数,为其他函数添加附加功能
      2>原则:(1)不能修改被装饰函数的源代码;(2);不能修改呗装饰的函数的调用方式

      实现装饰器知识储备:(1)函数即变量(2)高阶函数(满足其一就是:一个函数作为另一个函数的入参;返回值包含函数名(3)嵌套函数
      高阶函数 + 嵌套函数 = 修饰器

    1.简单的装饰器,统计接口运行时间

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import time
    def timer(func):
        def deco(*args,**kwargs):
            start_time = time.time()
            return func(*args,**kwargs)
            end_time = time.time()
            print('the run time is %s'%(end_time-start_time))
        return deco
     
    # test1 = timer(test1)
    @timer
    def test1(times):
        time.sleep(times)
        print('in the test1')
        return times
     
    print(test1(1))

    输出结果:

    1
    2
    in the test1
    1

    2.模拟某些函数需要登陆验证,验证方式分为本地和ldap验证(完整版)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #模拟某些函数需要登陆验证,验证方式分为本地和ldap验证
     
    userName,passWord ="Bert","abc123"  #假设是数据库用户名密码
    def auth(auth_type):
        def outer_wrapper(func):
            def wrapper(*args,**kwargs):
                if auth_type == 'local':
                    user_name =input('Username:').strip()
                    pass_word =input('Password:').strip()
                    if user_name == userName and pass_word == passWord:
                        print("用户名密码验证成功!")
                        return func(*args,**kwargs)
                    else:
                        print("用户名密码验证失败!")
                elif auth_type == 'ldap':
                    print('ldap方式验证登录。。。')
                    return func(*args,**kwargs)
            return wrapper
        return outer_wrapper
     
    def index():
        print('in the index')
        return 'index'
    @auth(auth_type="local") #auth_type装饰器最外层函数的入参
    def home():
        print('in the home')
        return 'home'
     
    @auth(auth_type="ldap")
    def bbs():
        print('in the bbs')
        return 'bbs'
     
    index()
    home()
    bbs()
  • 相关阅读:
    jenkins for xcode
    时间你懂的,
    插件,
    basic ,token添加
    上火啊,替换字符串,HTML,
    shell
    不可深究啊,
    看着 自己都感觉 恶心的代码,
    Tab切换效果
    jar -- java文档归档工具
  • 原文地址:https://www.cnblogs.com/bert227/p/9299637.html
Copyright © 2011-2022 走看看