Python中的装饰器

首先奉上几篇写得很好的博文:

刘江的博客教程: Python 装饰器

廖雪峰的官方网站: Python 装饰器

理解 Python 装饰器看这一篇就够了

以下是本人写的例子:

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
27
28
29
30
31
32
33
# 第一个带参数的装饰器
def outermost(form):
print(form)
def outer(func):
def inner(*args, **kwargs):
print("第一个装饰器!")
value = func(*args, **kwargs) # 执行foo必不可少
return value # 需要用到foo的返回值时必不可少
return inner # 必不可少
return outer # 必不可少

# 第二个带参数的装饰器
def outermost2(name):
print(name)
def outer2(func):
def inner2(*args, **kwargs):
print("第二个装饰器!")
value2 = func(*args, **kwargs) # 执行foo必不可少
return value2 # 需要用到foo的返回值时必不可少
return inner2 # 必不可少
return outer2 # 必不可少

@outermost(form="函数功能:求两个数的立方和")
@outermost2(name="代码由chubbylhao编写")
# 初始函数
def foo(a, b, *, c=2):
res = a**c + b**c
print("计算结果是%d" % res)
return res**2

# 调用
bar = foo(1, 2, c=3)
print("计算结果的平方是%d" % bar)

输出的结果是:

1
2
3
4
5
6
函数功能:求两个数的立方和
代码由chubbylhao编写
第一个装饰器!
第二个装饰器!
计算结果是9
计算结果的平方是81

在不清楚(或忘记)装饰器的用法时,回头跑一跑上面的代码就都清晰了

~~多写写测试代码,检查逻辑问题