直接上代码看效果:

  # 定义一个最简单的装饰器

  def user_login_data(f):
    def wrapper(*args, **kwargs):
      return f(*args, **kwargs)     return wrapper   # 用装饰器装饰以下两个函数
  
  @user_login_data
  def num1():
    print("aaa")   @user_login_data
  def num2():
    print("bbbb")   if __name__ == '__main__':
    print(num1.__name__)
    print(num2.__name__)  以上代码的输出结果为:     wrapper     wrapper 由此函数使用装饰器时,函数的函数名即 __name__已经被装饰器改变. 一般定义装饰器的话可以不用考虑这点,但是如果多个函数被两个装饰器装饰时就报错,因为两个函数名一样,第二个函数再去装饰的话就报错. 解决方案就是引入 functools.wraps ,以上代码的解决如下:          def user_login_data(f):
      @functools.wraps(f)
      def wrapper(*args, **kwargs):
        return f(*args, **kwargs)       return wrapper 增加@functools.wraps(f), 可以保持当前装饰器去装饰的函数的 __name__ 的值不变 以上输出结果就是:     num1     num2

转载: https://www.cnblogs.com/skaarl/p/9406910.html

python functiontools模块中的 wraps的更多相关文章

  1. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

  2. Python multiprocess模块(中)

    主要内容: 一. 锁 二. 信号量 三. 事件 通过event来完成红绿灯模型 四. 队列(重点) 队列实现进程间的通信 五. 生产者消费者模型 1. 初始版本(程序会阻塞住) 2. 升级版本一(通过 ...

  3. Python OS模块中的fork方法实现多进程

    import os '''使用OS模块中的fork方式实现多进程''' '''fork方法返回两次,分别在父进程和子进程中返回,子进程中永远返回0,父进程返回的是子进程的is''' if __name ...

  4. python之模块中包的介绍

    跨文件夹导入模块 1:有文件夹a,名下有ma功能,在文件夹外调用ma功能的话, 导入import a.ma 运用ma() 或者 from a import ma ma() 2;假定a有多重文件夹,想要 ...

  5. python 查看模块中的方法

    way 1.help() way 2.dir() # dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: way 3. 使用inspect模块, inspect.getmembe ...

  6. 修改python import模块中的变量

    可以直接通过 模块名.变量名=xx 的方式修改模块中的全局变量,测试代码如下 模块:test_model.py x = 111 def inc_x(): global x x = x + 1 测试脚本 ...

  7. python threading模块中对于信号的抓取

    最近的物联网智能网关(树莓派)项目中遇到这样一个问题:要从多个底层串口读取发来的数据,并且做出相应的处理,对于每个串口的数据的读取我能想到的可以采用两种方式: 一种是采用轮询串口的方式,例如每3s向每 ...

  8. python functiontools 模块

    一个内置的模块.  作用是实现了更多的功能, 同时形式上显得很简洁.    虽然在使用很方便, 但其中的原理还是很难复杂的. ------------------------------------- ...

  9. [python]glob模块中的glob()函数为什么返回空列表??

    最近在学习语音的知识,看一个语音合成实现的相关工具包的源代码,碰到了glob()函数.然后开启了我与这个函数相爱想杀的一个下午. 摘自官网解释: https://docs.python.org/2/l ...

随机推荐

  1. 002-红黑树【B-树】、二叉查找树

    一.引述-二叉查找树 红黑树(Red Black Tree) 一种特殊的二叉查找树.故先查看二叉查找树 二叉查找树特性:左字数上所有的节点的值都小于或等于他的根节点上的值 右子树上所有节点的值均大于或 ...

  2. 查看文件内容 cat , tac

    cat  文件名字tac  文件名字  --  倒序查看文件内容

  3. php判断是否为命令行模式

    function is_cli(){ : ; }

  4. std::bind学习

    std::bind bind是对C++98标准中函数适配器bind1st/bind2nd的泛化和增强,可以适配任意的可调用对象,包括函数指针.函数引用.成员函数指针和函数对象. bind接受的第一个参 ...

  5. Filte过滤器

    过滤器 , 其实就是对客户端发出来的请求进行过滤. 浏览器发出, 然后服务器派servlet处理.  在中间就可以过滤, 其实过滤器起到的是拦截的作用.生活中的过滤器例如:门禁,你有门卡才能过去,没有 ...

  6. linux 下tftpf搭建

     什么是TFTP服务 TFTP(Trivial File Transfer Protocol,简单文件传输协议)   是TCP/IP协议族中的一个用来在客户机与服务器之间进行   简单文件传输的协 ...

  7. js高级---本地对象、内置对象、宿主对象

    名词参考: 原生对象:也叫内部对象.本地对象.native object 内置对象:Build-in object 宿主对象:host object ECMA-262 定义: 原生对象:独立于宿主环境 ...

  8. flask 在视图函数里操作数据库

    在视图函数里操作数据库 在视图函数里操作数据的方式和在python shell中的联系基本相同,只不过需要一些额外的工作.比如把查询结果作为参数 传入模板渲染出来,或是获取表单的字段值作为提交到数据库 ...

  9. C#对象序列化成XML,以及自定义标签名

    C#对象序列化操作: public class XMLHelper { /// <summary> /// 对象序列化成 XML String /// </summary> p ...

  10. cxf配置

    先记录一下,后期补充配置原因 原先的spring3.X(struts2)的时候配置cxf2.x没问题,基本就是在context.xml中加入 <import resource="cla ...