• python中装饰器的使用


    看个例子:

    # 定义装饰器函数
    def log(func):
        """
        接受一个函数作为参数,并返回一个函数
        :param func:
        :return:
        """
        def wrapper(*args,**kwargs):
            """
            :param args:
            :param kwargs:
            :return:
            """
            print("call %s():"% func.__name__)
            return func(*args,**kwargs)
        return wrapper
    
    @log
    def now():
        print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
    now()

    输出:

    call now():
    2020-04-04 22:51:23

    1、本来now()的功能只是打印时间,现在我们要增强now()功能,在这里我们把这种自己定义的log函数的方式叫做装饰器(decorator)

    def now():
        print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))

    2、本质上装饰器是返回函数的高阶函数,接受一个函数作为参数,并返回一个函数

    def log(func):
        """
        接受一个函数作为参数,并返回一个函数
        :param func:
        :return:
        """
        def wrapper(*args,**kwargs):
            """
            :param args:
            :param kwargs:
            :return:
            """
            print("call %s():"% func.__name__)
            return func(*args,**kwargs)
        return wrapper

    3、借助@语法

    log
    def now():
        print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))

    运行now():

    call now():
    2020-04-04 22:51:23

    这里相当于执行了now=log(now)

    在wrapper函数内,可以接受任意参数的调用,首先打印日志,后面再调用原始的函数

    博文参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584

    业精于勤而荒于嬉,勤劳一日,可得一日安眠;勤劳一生,可得幸福一生。因为,我们努力了;因为,天道酬勤。
  • 相关阅读:
    自定义“浏览文件夹”对话框
    CYABFFW:这是另一个文件夹包装器
    CYABFFW:这是另一个文件夹包装器
    ToDoList样式表:教程
    7.2.23 -一个有效而灵活的方法来掌握你的任务
    使用。net SDK编写位图按钮控件
    在MVC应用程序中使用自动程序进行CRUD操作
    imp
    openpyxl
    fabric
  • 原文地址:https://www.cnblogs.com/Mr-choa/p/12635015.html
Copyright © 2020-2023  润新知