python的基本装饰器

文章发布时间:

最后更新时间:

文章总字数:
384

预计阅读时间:
1 分钟

装饰器

本质是回调与闭包的结合,用一个装饰器装饰一个函数。

一.基本装饰器

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
34
35
36
37
38
39
40
def decorater(fun):
# 闭包
def deco():
# 未来会变成各种代码
print('装饰代码一')

fun()

# 未来会变成各种代码
print('装饰代码二')

return deco

@decorater

# 回调
def fun1():
print('fun')
fun1()

# 来个换行更好看
print()

# 能传参的情况
def decorater1(fun):
def deco(a,b):
# 未来会变成各种代码
print('装饰代码一')

fun(a,b)

# 未来会变成各种代码
print('装饰代码二')

return deco

@decorater1
def fun2(a,b):
print(a+b)
fun2(1,2)

输出:

1
2
3
4
5
6
7
装饰代码一
fun
装饰代码二

装饰代码一
3
装饰代码二

二.带参装饰器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 实际调用的是外壳装饰器内部的真正装饰器
def decorater(num):
# 真正的装饰器
def real_decorater(fun):
def wrapper():
print('装饰代码一')

# 参数的作用
for i in range(num):
fun()

print('装饰代码二')
return wrapper
return real_decorater

@decorater(2)
def self_fun():
print('这是被装饰的函数')

self_fun()

输出:

1
2
3
4
装饰代码一
这是被装饰的函数
这是被装饰的函数
装饰代码二

三.装饰器链

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
def decorater(fun):
def deco():
# 未来会变成各种代码
print('装饰器一')

fun()

return deco

def decorater1(fun):
def deco():
# 未来会变成各种代码
print('装饰器二')

fun()

return deco

# 用装饰器一来装饰(装饰器二装饰的结果)
@decorater
@decorater1
def hello():
print('hello')

hello()

输出:

1
2
3
装饰器一
装饰器二
hello