zoukankan      html  css  js  c++  java
  • python3 开发面试题(装饰器必须考)6.4

    def f():
        print("2018-06-04")
    
    # 每次调用f的时候 在打印"2018-06-04" 之前打印一句 开始, 之后再打印一句 结束  
    def wrapper(func):
        def inner():
            print("start")
            func()
            print("end")
        return inner
    
    @wrapper
    def f():
        print("2018-06-04")
    答案

    但这里面还是有缺陷的,原函数如果有功能注释的话,经过装饰器装饰的函数,就看不到原函数的注释,所以我们可以优化一下

    from functools import wraps    #优化装饰器的模块
    
    def wrapper(func):
        @wraps(func)                 #在这里装饰
        def inner(*args, **kwargs):  #有参数的情况
            print("start")
            ret = func(*args, **kwargs)
            print("end")
            return ret            #有返回值的情况下
        return inner
    
    @wrapper
    def f(*args, **kwargs):   #有参数的情况下
        """
        这是一个测试装饰器的函数,没什么其他的用法
        :param args:
        :param kwargs:
        :return:
        """
        print("2018-06-04")
    
    f()  # inner()
    print(f.__doc__)
    print(f.__name__)
    
    '''
    start
    2018-06-04
    end
    
        这是一个测试装饰器的函数,没什么其他的用法
        :param args:
        :param kwargs:
        :return:
        
    f
    '''
  • 相关阅读:
    74HC165并转串级联芯片学习记录
    道砟电阻 钢轨阻抗 列车分路电阻
    电压的有效值、平均值与峰值
    铁路信号继电器
    C语言语法记录
    程序编译过程中错误记录
    min-max容斥
    矩阵树定理
    题解 SP1812 【LCS2
    杜教筛
  • 原文地址:https://www.cnblogs.com/ManyQian/p/9133309.html
Copyright © 2011-2022 走看看