Python装饰器

Posted lockegogo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python装饰器相关的知识,希望对你有一定的参考价值。

Python装饰器

1. 定义
本质是函数,用来装饰其他函数,为其他函数添加附加功能

2. 原则
a. 不能修改被装饰函数的源代码
b. 不能修改被装饰的函数的调用方式

3. 实现装饰器知识储备
a. 函数就是变量
b. 高阶函数
i. 把一个函数当作实参传给另外一个函数,在不修改被装饰函数源代码情况下为其添加功能
ii. 返回值中包含函数名, 不修改函数的调用方式
c. 嵌套函数
 高阶函数+嵌套函数==》装饰器

 1 # Author: Lockegogo
 2 
 3 user, passwd = ‘LK‘, ‘130914‘
 4 def auth(auth_type):
 5     print(‘auth func:‘, auth_type)
 6     def outher_wrapper(func):
 7         def wrapper(*args, **kwargs):
 8             print(‘wrapper func:‘, *args, **kwargs)
 9             if auth_type == ‘local‘:
10                 username = input(‘username:‘).strip()
11                 password = input(‘password:‘).strip()
12                 if user == username and password == passwd:
13                     print(‘33[32;1mUser has passed authentication33[0m‘)
14                     res = func(*args, **kwargs)
15                     return res
16                 else:
17                     exit(‘33[32;1mInvalid Username or password33[0m‘)
18             elif auth_type == ‘ldap‘:
19                 print(‘ldap,不会‘)
20         return wrapper
21     return outher_wrapper
22 
23 def index():
24     print(‘welcome to index page‘)
25 @auth(auth_type=‘local‘) # home = outher_wrapper(home)
26 def home():
27     print(‘welcome to home page‘)
28     return ‘from home‘
29 @auth(auth_type=‘ldap‘)
30 def bbs():
31     print(‘welcome to bbs page‘)
32 
33 index()
34 print(home())
35 bbs()

以上是关于Python装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 装饰器:装饰器实例内置装饰器

python 装饰器:装饰器实例内置装饰器

python 装饰器:装饰器实例类装饰器(装饰函数)

python 装饰器:装饰器实例类装饰器(装饰函数)

理解Python装饰器

python高阶3 python装饰器