首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python装点器

2012-12-19 
python装饰器python中最不想python风格的就是装饰器了,特别是‘@’很令新来python的人费解,不过装饰器可是很

python装饰器
python中最不想python风格的就是装饰器了,特别是‘@’很令新来python的人费解,不过装饰器可是很强大的功能。
装饰器语法有两种,类风格和函数风格
类风格例子:

class entryExit(object):    def __init__(self, f):        self.f = f    def __call__(self):        print "Entering", self.f.__name__        self.f()        print "Exited", self.f.__name__@entryExitdef func1():    print "inside func1()"@entryExitdef func2():    print "inside func2()"func1()func2()

输出结果是
Entering func1inside func1()Exited func1Entering func2inside func2()Exited func2

类装饰的设计需要连个方法,包含参数为装饰函数的初始化函数和代替执行函数的__call__函数,当该python文件被编译时,先执行初始化方法,当被装饰的函数被执行的时候执行__call__方法中的内容,自己本身的执行内容也被__call__方法替代,因此把装饰函数提前在初始化方法中为__call__准备好使用。
函数风格代码比较简单:
def entryExit(f):    def new_f():        print "Entering", f.__name__        f()        print "Exited", f.__name__    return new_f@entryExitdef func1():    print "inside func1()"@entryExitdef func2():    print "inside func2()"func1()func2()print func1.__name__

结果同上,其中的new_f是python语法中的闭包,打印函数名称时打印了'new_f',如果想打印当前调用的函数,则可修改为
def entryExit(f):    def new_f():        print "Entering", f.__name__        f()        print "Exited", f.__name__    new_f.__name__ = f.__name__    return new_f

热点排行