栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python装饰器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python装饰器

"""
1.什么是装饰器:
    装饰函数或者类,对函数或类进行功能的扩展
    函数装饰器就是一个闭包函数
    装饰器包含函数装饰器和类装饰器
    函数装饰器带参数实质就是在外面在包裹一个函数
    当有多个装饰器时先执行最里面的装饰器,最后执行最外面的(就近原则)
"""
import logging
import time

def runTime(func):
    def wrapper(*args,**kwargs):
        start_time = time.time()
        #执行原函数功能
        func(*args,**kwargs)
        time.sleep(1)
        end_time = time.time()
        const = end_time - start_time
        print(f"统计{func.__name__}函数耗时{const}秒")
    return wrapper


def testLog(func):
    def get_logger():
        logger = logging.getLogger("logger")
        logger.setLevel("DEBUG")
        if not logger.handlers:
            path = time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime())
            fh = logging.FileHandler(path + ".log", encoding="utf-8")
            fmt = logging.Formatter("%(asctime)s %(filename)s:%(lineno)s %(message)s", datefmt="%Y/%m/%d %H:%M:%S")
            fh.setFormatter(fmt)
            logger.addHandler(fh)
        return logger

    def wrapper(*args, **kwargs):
        try:
            func(*args, **kwargs)
            get_logger().info("执行成功")
        except Exception as e:
            get_logger().error(str(e))

    return wrapper

@runTime
def welcome_vip():
    print("欢迎来到vip")

@runTime
def fun2(a,b):
    sum = a + b
    print(f"执行函数2,sum={sum}")

@runTime
def fun3(a,b,c):
    sum = a + b + c
    print(f"执行函数3,sum={sum}")

@testLog
def fun4(a,b,c):
    sum = a+ b + c
    print(f"执行函数4,sum={sum}")

if __name__ == '__main__':
    # welcome_vip()
    # fun2(1,2)
    # fun3(1,2,3)
    fun4(1,2)

"""类装饰器"""
class Demo:
    def __init__(self,func):
        self.func = func

    #实例(),自动执行__call__方法
    def __call__(self, *args, **kwargs):
        print("执行__call__方法")
        #执行被装饰的函数功能
        self.func()
        #扩展功能
        print(f"执行了{self.func.__name__}扩展功能")

@Demo
def test():
    print("执行test函数")

#原函数功能+扩展功能
# test = Demo(test)
# test()

def a(func):
    def wrapper():
        func()
        print("a")
    return wrapper

def b(func):
    def wrapper():
        func()
        print("b")
    return wrapper

def c(func):
    def wrapper():
        func()
        print("c")
    return wrapper

@c
@b
@a
def test():
    pass

test()
#结果a b c
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号