zoukankan      html  css  js  c++  java
  • python装饰器初探

    一、含有一个装饰器
     1 #encoding: utf-8
     2 
     3 ############含有一个装饰器#########
     4 def outer(func):
     5     def inner(*args, **kwargs):#要装饰f1(),这里用这俩形式参数,可以接受任意个参数,不管f1定义几个参数
     6         print "1"
     7         r = func(*args, **kwargs)#这里要用func,不要用f1
     8         print "2"
     9         return r
    10     return inner
    11 
    12 @outer  #这里outer不要加括号
    13 def f1(a1, a2):
    14     print "a1 + a2 = "
    15     return a1 + a2
    16 
    17 f1(1,2)
    二、含有两个(多个)装饰器
     1 ############含有二个装饰器#########
     2 
     3 def outer0(func):#第一个
     4     def inner(*args, **kwargs):
     5         print "AAAAAAAAA"
     6         r = func(*args, **kwargs)
     7         print "BBBBBBBB"
     8         return r
     9     return inner
    10 
    11 def outer(func):  #第二个
    12     def inner(*args, **kwargs):#要装饰f1(),这里用这俩形式参数,可以接受任意个参数,不管f1定义几个参数
    13         print "1"
    14         r = func(*args, **kwargs)#这里要用func,不要用f1
    15         print "2"
    16         return r
    17     return inner
    18 @outer0  #俩装饰器,流程就是:执行f1()的时候,先执行outer0.inner(),outer0.inner().func调用outer的inner函数(即:将outer0.inner().func替换为outer.inner()),也就是outer.inner()函数作为outer0的参数,
    19          # 然后outer.inner().func再调用f1()(即:将outer.inner().func替换为f1())
    20 @outer  #这里outer不要加括号
    21 def f1(a1, a2):
    22     print "a1 + a2 = %d" %(a1+a2)
    23     return 1
    24 
    25 f1(1,2)
    View Code
    
    
    
    
    
    
    
    
  • 相关阅读:
    MySQL索引的操作
    MySQL表的操作02
    MySQL表的操作01
    字典实现简单购物车程序
    python 中if和elif的区别
    格式化操作---%方法
    正则表达式相关知识
    实现 像网易云音乐 播放列表那样的弹出型Dialog
    为什么在非UI线程中操作UI的改变失不安全的
    模板方法模式-Template Method
  • 原文地址:https://www.cnblogs.com/wt11/p/5688508.html
Copyright © 2011-2022 走看看