python decorator的理解

一、decorator的作用

  装饰器本质上是一个Python函数,可以让其他函数在不做任何代码变动的前提下增加额外功能。

  装饰器的返回值也是一个函数对象。python里函数也是对象。

  它经常用于有切面需求(什么是切面需求?)的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

  装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

  概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

二、简单的装饰器

  之前一篇很潦草的 python中的@  

def use_logging(func):
    print "%s is running" % func.__name__
    return func()

@use_logging
def fun_a():
    print "hello, I'm func_a."

fun_a  #带括号()报错 fun_a() TypeError: 'NoneType' object is not callable
-----------  

fun_a is running # 先执行use_logging
hello, I'm func_a.
 
def use_logging(func):
    def wrapper(*args, **kwargs):
        print "%s is running" % func.__name__
        return func()
    return wrapper


@use_logging
def fun_a():
    print "hello, I'm func_a."

fun_a()
-------
fun_a is running
hello, I'm func_a.

 

三、带参数的装饰器

 

四、如何写出好的装饰器

  

 

 

 

 

 

 

 

------------

  source:【1】如何理解python的装饰器

       【2】Python 里为什么函数可以返回一个函数内部定义的函数?

posted @ 2016-08-16 08:25  半天的半天  阅读(518)  评论(0编辑  收藏  举报