• python--装饰器


    装饰器:高阶函数 + 嵌套函数 = 装饰器

    定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能

    原则:不能修改被装饰函数的源代码;

        不能修改被装饰的函数的调用方式;

    实现装饰器知识储备:

    1. 函数即“变量”
    2. 高阶函数(把一个函数名,当做实参传给另一个函数;    2,返回值中包含函数名)
    3. 嵌套函数

    没有参数的小小装饰器:

    import time
    
    def timer(func):    #func函数名,就是函数func()的内存地址
        def deco():
            start_time = time.time()
            func()
            stop_time = time.time()
            print('运行时间是:%s'%(stop_time-start_time))
        return deco #此时的deco就是函数deco() 在内存中的位置
    
    def free():
        time.sleep(3)
        print('in the freee')
    
    @timer  #bbs = timer(bbs)
    def bbs():
        time.sleep(2)
        print('33[31min the bbsssssss33[0m')
    
    free()
    bbs()
    

      

     传参数的 中级装饰器:

    def timer(func):    #func函数名,就是函数func()的内存地址
        def deco(*args,**kwargs):   #************传参数,func需要传参数
            start_time = time.time()
            func(*args,**kwargs)
            stop_time = time.time()
            print('运行时间是:%s'%(stop_time-start_time))
        return deco #此时的deco就是函数deco() 在内存中的位置
    

      

    据说这是终极版,来装隔壁:

    # -*- coding: utf-8 -*-
    
    username,password = 'alex','asdf'
    
    def auth(type):
        def out_wraper(func):
            def decor():
                if type == 'local':
                    user_input = input('username: ').strip()
                    passwd_input = input('password: ').strip()
                    if user_input == username and passwd_input == password:
                        print('welcome, you got current passwd !!!33[34m current username33[0m')
                        func()
                    else:
                        exit('ooooh, shit , wrong password')
                elif type =='ldap':
                    print('还没有学会ldap,ldap 33[36m ldapdddp33[0m')
                    pass
            return decor
        return out_wraper
    
    def free():
        print('33[31mNum1:this is freeeeeeeeeee33[0m')
    
    @auth(type = 'ldap')
    def home():
        print('33[32mNum2:welcome to your home,,,,home33[0m')
    
    @auth(type = 'local')
    def bbs():
        print('33[33mNum3:这里是bbs bbs bbs bbsbbssssss33[0m')
    
    free()
    home()
    bbs()
    

      自古深情留不住,总是套路得人心!

    感觉学习也是,多多见识,多多套用!

  • 相关阅读:
    列出对像属性,for(var i in obj)
    检测碰撞实例
    Rectangle 、getBounds(this)
    判断mc是否播放完成的简单方法
    操作规范时间工具类
    文本框中文字用htmlText操作并且实现文本框中文字加链接【link的用法】
    让舞台上的btn灰掉
    简单的缓动
    加入文本框
    HDU 1297 Children’s Queue (DP)
  • 原文地址:https://www.cnblogs.com/yes5144/p/6939862.html
Copyright © 2020-2023  润新知