装饰器的基础是 python 中函数也是对象,可以进行传递,可以在函数内部定义新的函数(函数内部的函数无法被单独调用)。
http://www.codecho.com/understanding-python-decorators/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 装饰器makebold用于转换为粗体
def makebold(fn):
# 结果返回该函数
def wrapper():
# 插入一些执行前后的代码
return "<b>" + fn() + "</b>"
return wrapper
# 装饰器makeitalic用于转换为斜体
def makeitalic(fn):
# 结果返回该函数
def wrapper():
# 插入一些执行前后的代码
return "<i>" + fn() + "</i>"
return wrapper
@makebold
@makeitalic #注意顺序很重要!!!!!
def say():
return "hello"
print say()
#输出: <b><i>hello</i></b>
# 等同于
def say():
return "hello"
say = makebold(makeitalic(say))
print say()
#输出: <b><i>hello</i></b>