【装饰器补充】
装饰器前奏:

装饰器变形:
(1)第一种变形

(2)第二种变形

(3)第三种变形

(4)第四种变形(正确且标准得装饰器)

装饰器装饰带有参数的函数:

带标志位的装饰器:

应用场景:例如装饰器是为了测试代码运行时间,但是生产环境上线是需要去掉多余得功能,这时候可以把装饰器标志位改为False即可,避免了频繁的删除操作。
带参数的装饰器:
|
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
41
42
43
44
45
46
47
48
|
import timecurrent_login = {'name': None, 'login': False}def timmer(func): def wrapper(*args, **kwargs): start_time = time.time() res = func(*args, **kwargs) # my_max(1,2) stop_time = time.time() print('run time is %s' % (stop_time - start_time)) return res return wrapperdef auth2(auth_type='file'): def auth(func): # print(auth_type) def wrapper(*args, **kwargs): if current_login['name'] and current_login['login']: res = func(*args, **kwargs) return res if auth_type == 'file': name = input('username: ') password = input('password: ') if name == 'luchuan' and password == '123': print('auth successfull') res = func(*args, **kwargs) current_login['name'] = name current_login['login'] = True return res else: print('auth error') elif auth_type == 'sql': print('还他妈不会玩') return wrapper return auth@timmer@auth2(auth_type='file') # @auth #index=auth(index)def index(): print('welcome to inex page')@auth2()def home(): print('welcome to home page')# 调用阶段index()home() |
本文深入探讨了Python中装饰器的概念及其多种变形,并通过实例展示了如何使用装饰器进行功能增强,如时间测试与用户认证等。
711

被折叠的 条评论
为什么被折叠?



