zoukankan      html  css  js  c++  java
  • 解决使用装饰器后函数名称变成inner的情况

    def dynamic_report(target01,target02):
        '''
        带参装饰器
        :param target: 装饰器传进来的参数
        :return:
        '''
        def decorate(fun):
            def inner(*args,**kwargs):
                print('调用时候传进来的参数',target01,target02)
                fun(*args,**kwargs)
                print('调用后传进来的参数',target01,target02)
            return inner
    
        return decorate
    
    @dynamic_report('zxb','zxl')
    def method(a,b):
        print('method方法',a+b)
    
    if __name__ == '__main__':
        method(1,2)
        print(method.__name__)

     method的函数名称为什么变成inner了,因为 #method=decorate(method) 函数返回名称为inner因此我们得到函数的名称就是inner

    解决办法:

      引入import functools 模块 使用装饰器 @functools.wraps(fun),将函数名称传进去就解决了,如下图

    def dynamic_report(target01,target02):
        '''
        带参装饰器
        :param target: 装饰器传进来的参数
        :return:
        '''
        def decorate(fun):
            @functools.wraps(fun)
            def inner(*args,**kwargs):
                print('调用时候传进来的参数',target01,target02)
                fun(*args,**kwargs)
                print('调用后传进来的参数',target01,target02)
            return inner
    
        return decorate
    
    @dynamic_report('zxb','zxl')
    def method(a,b):
        print('method方法',a+b)
    
    if __name__ == '__main__':
        method(1,2)
        print(method.__name__)

  • 相关阅读:
    Hdu 2564 单词缩写(字符串输入流的使用)
    Hdu2824 快速求欧拉函数和
    hdu 1787 欧拉函数模板
    Hdu2558(欧拉函数)
    hdu 1175连连看 (bfs带方向变化次数)
    pandas 使用总结
    APScheduler 定时任务使用总结
    watchdog 监控文件变化使用总结
    js 鼠标特效
    js 生成雪花间隔
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14297709.html
Copyright © 2011-2022 走看看