装饰器(decorator):
1>定义: 本质是函数,功能是用来装饰其他函数,为其他函数添加附加功能
2>原则:(1)不能修改被装饰函数的源代码;(2);不能修改呗装饰的函数的调用方式
实现装饰器知识储备:(1)函数即变量(2)高阶函数(满足其一就是:一个函数作为另一个函数的入参;返回值包含函数名(3)嵌套函数
高阶函数 + 嵌套函数 = 修饰器
1.简单的装饰器,统计接口运行时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import
time
def
timer(func):
def
deco(
*
args,
*
*
kwargs):
start_time
=
time.time()
return
func(
*
args,
*
*
kwargs)
end_time
=
time.time()
print
(
'the run time is %s'
%
(end_time
-
start_time))
return
deco
# test1 = timer(test1)
@timer
def
test1(times):
time.sleep(times)
print
(
'in the test1'
)
return
times
print
(test1(
1
))
|
输出结果:
1
2
|
in
the test1
1
|
2.模拟某些函数需要登陆验证,验证方式分为本地和ldap验证(完整版)
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
|
#模拟某些函数需要登陆验证,验证方式分为本地和ldap验证
userName,passWord
=
"Bert"
,
"abc123"
#假设是数据库用户名密码
def
auth(auth_type):
def
outer_wrapper(func):
def
wrapper(
*
args,
*
*
kwargs):
if
auth_type
=
=
'local'
:
user_name
=
input
(
'Username:'
).strip()
pass_word
=
input
(
'Password:'
).strip()
if
user_name
=
=
userName
and
pass_word
=
=
passWord:
print
(
"用户名密码验证成功!"
)
return
func(
*
args,
*
*
kwargs)
else
:
print
(
"用户名密码验证失败!"
)
elif
auth_type
=
=
'ldap'
:
print
(
'ldap方式验证登录。。。'
)
return
func(
*
args,
*
*
kwargs)
return
wrapper
return
outer_wrapper
def
index():
print
(
'in the index'
)
return
'index'
@auth
(auth_type
=
"local"
)
#auth_type装饰器最外层函数的入参
def
home():
print
(
'in the home'
)
return
'home'
@auth
(auth_type
=
"ldap"
)
def
bbs():
print
(
'in the bbs'
)
return
'bbs'
index()
home()
bbs()
|