Python 函数装饰器

原创 2016年05月30日 20:22:49
from time import ctime,sleep


def tsfunc(func):
    def wrappedFunc(a):
        print  '[%s] %s() called, a= %s ' % (ctime(), func.__name__, a)

        return func()



    return  wrappedFunc

@tsfunc
def foo():
    print "doci daci"


foo(3)
sleep(2)
foo(4)

函数装饰器,就是修饰,修改一个函数,有点像AOP编程。

首先foo是一个函数 。

其实tsfunc也是另一个函数,
使用@符号时候,就相当于是调用了tsfunc 这个函数,同时参数就是foo。

可以看到tsfunc接受一个参数。
它的目的,是生成另一个函数。在tsfunc内部,名字叫wrappedFunc, 它返回了wrappedFunc。

所以应该定义wrappedFunc。

其实,现在foo已经不是foo了,foo传进了tsfunc中,返回的是wrappedFunc。
相当于
foo=tsfunc(foo),
在之后,foo的使用者, 要使用foo的时候,要看着wrappedFunc的参数来使用了。

tsfunc就像是 函数熔炉。重炼了。

当装饰器有参数时,相当于,熔炉,首先要重炼。所以生成的函数就又多了一层。如下所示。

from time import ctime,sleep


def tsfunc(arg):
    def ts_ts_func(func):
        def wrappedFunc(a):
            print  '[%s] %s() called, a= %s, arg=%s ' % (ctime(), func.__name__, a, arg)

            return func()



        return  wrappedFunc
    return ts_ts_func

@tsfunc("123")
def foo():
    print "doci daci"


foo(3)
sleep(2)
foo(4)

以前不理解装饰器, 慢慢练习写写,从简单,到复杂,慢慢就有感觉了。

参考 http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html

Python 装饰器装饰类中的方法

title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] c...
  • hesi9555
  • hesi9555
  • 2017年04月18日 09:54
  • 1901

Python——编写函数装饰器

本文主要介绍了编写函数装饰器的内容,举了一些常见的例子,介绍了添加装饰器参数等...
  • ggGavin
  • ggGavin
  • 2016年03月15日 19:38
  • 2112

Python多个装饰器的顺序

原文链接:http://www.cnblogs.com/nisen/p/6193426.html?utm_source=itdadao&utm_medium=referral 装饰器是Pyth...
  • jyhhhhhhh
  • jyhhhhhhh
  • 2017年01月20日 02:51
  • 1820

python进阶学习笔记(二)——闭包、装饰器、偏函数

python中闭包 和装饰器
  • Peter_JJH
  • Peter_JJH
  • 2017年04月09日 14:38
  • 412

Python学习23:函数装饰器的使用(方法重用)

装饰器实现原理 普通装饰器 多重装饰器
  • jiezhj
  • jiezhj
  • 2014年07月29日 17:08
  • 692

python 嵌套函数->闭包->装饰器

概述python的终极使用是装饰器,但在使用装饰器前需要掌握闭包,但是掌握闭包之前需要掌握嵌套函数,下面由浅入深来说下他们的关系。嵌套函数很多高级语言都支持函数的嵌套的定义(划重点:是定义,不是调用)...
  • tanyjin
  • tanyjin
  • 2017年11月18日 14:36
  • 344

Python中的函数、装饰器

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 >>> s = ['AASDa', 'dendY']>>>...
  • z_Dendy
  • z_Dendy
  • 2015年01月06日 16:17
  • 1336

Python 函数修饰符(装饰器)的使用

1.  修饰符的来源 借用一个博客上的一段叙述:修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。 修饰符是解决这类问题的绝佳设计,有了...
  • suguoliang
  • suguoliang
  • 2017年11月21日 16:23
  • 54

Python入门 第五天(装饰器、偏函数)

python中编写无参数decorator Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。 使用 decorator 用Pyth...
  • weixin_40475469
  • weixin_40475469
  • 2017年12月01日 21:06
  • 82

使用python装饰器计算函数运行时间

装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的。 本文主要是利用python装饰器计算函数运行...
  • qiqiyingse
  • qiqiyingse
  • 2017年05月04日 17:05
  • 966
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python 函数装饰器
举报原因:
原因补充:

(最多只允许输入30个字)