简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数。 比如,有一个函数: def func(): print 'func() run.' if '__main__' == __name__: func() 运行后将输出: func() run. 现在需要在函数运行前后打印一条日志
@deco
def func():
...
是下面代码的简写
func = deco(func)
这就是装饰器做的事情
[0]
private = 0
a simple fun
private = 1
a simple fun
private = 2
a simple fun
private = 3
a simple fun
private = 4
a simple fun
[0]
private = 0
a simple2 fun
private = 1
a simple2 fun
private = 2
a simple2 fun
private = 3
a simple2 fun
private = 4
a simple2 fun
#!/usr/bin/python2
# coding: utf-8
def deco(f):
private = [0]
print private
# wrap 是一个closure
def wrap():
print 'private = ', private[0]
f()
private[0] += 1
return wrap
@deco
def simple():
print "a simple fun"
for i in xrange(5):
simple()
def simple2():
print "a simple2 fun"
# @deco
# def simple():
# ...
# 是下面代码的简写
# simple = deco(simple)
# 这就是装饰器做的事情
simple2 = deco(simple2)
for i in xrange(5):
simple2()