python装饰器基础讲解
博客专区 > jastme 的博客 > 博客详情
python装饰器基础讲解
jastme 发表于2年前
python装饰器基础讲解
  • 发表于 2年前
  • 阅读 80
  • 收藏 10
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: python 装饰器 基础讲解

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计(比如django里的login_required),有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。


下面这是个简单的例子。

def my_decorator(args):                      #函数my_decorator 可带参数
     def wrapper():                          #内部函数
          print "Something is happening before some_function() is called."
          args()                             #把外面的函数当成对象传入参数,一切皆为对象的理念是有多重要
          print "Something is happening after some_function() is called."
     return wrapper

@my_decorator                                #申明下面的函数会使用这个装饰器,把下面的函数当成参数传到my_decorator函数中。
def function1():             
       print "Wheee!"

function1()

不知道大家能看明白不,其实这个是最基础的用法。

再复杂一点  使用多个修饰器

这个很好的例子 来自stackoverflow

def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold              
@makeitalic                  #调用顺序,从内到外
def hello():
    return "hello world"

print hello()

<b><i>hello world</i></b>


共有 人打赏支持
粉丝 36
博文 122
码字总数 59358
×
jastme
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: