def wrapper1(func1):
    def inner1():
        print('w1 ,before')
        func1()
        print('w1 after')
    return inner1

def wrapper2(func2):
    def inner2():
        print('w2 ,before')
        func2()
        print('w2 after')
    return inner2

@wrapper2   #  f =wrapper2(f) , func2=inner1函数 当执行完func2时, 就带表要去执行inner1,  func1() 执行的是真正的原函数.
@wrapper1   #  f =wrapper1(f) , func1=f原函数   f()=inner1
def f():
    print('in f')

f()        # f在这里 被我定义 变量,看下面理解,就ok了.

# 推荐一种方式 ,debug模式.
# 多个装饰器装饰一个函数相当于装饰器函数的嵌套  (相当于把另一个装饰器函数的inner方法作为参数传递给了另一个装饰器函数的形参func接收.) so不明白就看下面吧												

最新文章

  1. Request 和 Response 原理
  2. Log4Net简单使用
  3. ProcDump
  4. 【CodeVS 1004】四子连棋
  5. delphi读取excel
  6. Android图片压缩
  7. DiscreteSeekBar---->SeekBar的使用
  8. HTML系列(四):编辑图像
  9. 实现自己的http server - loop_in_codes - C++博客
  10. Python基础之迭代器和生成器
  11. 详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数
  12. VIM 使用心得
  13. tomcat和servlet的关系
  14. 一起KVM环境下windows7虚拟机异常死机(BSOD)的问题解决
  15. Oracle sql 优化の常用方式
  16. char、varchar、nchar、nvarchar特点比较
  17. android学习七 菜单
  18. 使用 typescript ,提升 vue 项目的开发体验(1)
  19. pycharm的todo和fixme标记,标志为今后再做和bug点
  20. java的nio包的SelectionKey,Selector,SelectableChannel三者的缠绵关系概述

热门文章

  1. 44.mapping下的数据结构
  2. PHP AES cbc模式 pkcs7 128加密解密
  3. dubbo客户端初始化问题
  4. Efficient ticket lock synchronization implementation using early wakeup in the presence of oversubscription
  5. Spring MVC-表单(Form)处理示例(转载实践)
  6. Hardware/Firmware/Software的区别
  7. SE955 激光扫描头设置 通过SSI串口进行设置
  8. Android View系统解析(下)
  9. Sql Server 强制断开数据库已有连接的方法
  10. HDU-5310-Souvenir(C++ && 简单数学题)