zoukankan      html  css  js  c++  java
  • 开发必备知识点--装饰器的修复技术

    我们之前学过的装饰器就函数嵌套加闭包。

    怎样获取函数名?有个__name__方法

     1 def f1():
     2     print('f1')
     3 
     4 def f2():
     5     print('f2')
     6 
     7 
     8 print(f1.__name__)
     9 print(f2.__name__)
    10 
    11 输出:
    12 f1
    13 f2

    通过装饰器修饰后呢?

     1 def wraper(func):
     2     def inner(*args,**kwargs):
     3         return func(*args,**kwargs)
     4     return inner
     5 
     6 @wraper
     7 def f1():
     8     print('f1')
     9 @wraper
    10 def f2():
    11     print('f2')
    12 
    13 
    14 print(f1.__name__)
    15 print(f2.__name__)

    输出结果

    1 inner
    2 inner

    结果都是inner,因为他已经修饰了,虽然我们调用到方式还是f1。但那只是对外的一种显示,内部还是真正执行的函数inner.这也不是什么错,可我们不想这样。

    通过装饰器修复技术,就可以解决这种问题。

    from functools import wraps
    
    
    def wraper(func):
        @wraps(func)  # 关键代码
        def inner(*args, **kwargs):
            return func(*args, **kwargs)
    
        return inner

  • 相关阅读:
    mysql读写分离
    mysql主从同步
    扫描与抓包
    加密与入侵检查
    监控
    selinux
    预期交互
    python发送邮件
    linux下安装虚拟环境
    博弈论
  • 原文地址:https://www.cnblogs.com/xjmlove/p/9955320.html
Copyright © 2011-2022 走看看