zoukankan      html  css  js  c++  java
  • 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

    业精于勤而荒于嬉,勤劳一日,可得一日安眠;勤劳一生,可得幸福一生。因为,我们努力了;因为,天道酬勤。
  • 相关阅读:
    SQLyog
    远程连接设置
    [转]Oracle/Altibase数据库中Sequence的用法
    worklight 初识
    C# Excel
    C#+AE 叠加分析
    Model Buider中 List和Series的区别[转]
    动态分段
    优化工具箱概述
    创建栅格数据
  • 原文地址:https://www.cnblogs.com/Mr-choa/p/12635015.html
Copyright © 2011-2022 走看看