一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#----------无参装饰器记忆格式------
def
wrapper(func):
def
inner(
*
args,
*
*
kwargs):
res
=
func(
*
args,
*
*
kwargs)
return
res
return
inner
#---------有参装饰器记忆格式-------
def
outer(flag):
def
func(t):
if
flag:
def
inner(
*
arg,
*
*
kwargs):
res
=
t(
*
arg,
*
*
kwargs)
return
res
return
inner
else
:
return
t
return
func
|
二:
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
|
# -------无参装饰器标准姿势-------
def
wrapper(func):
def
inner(
*
args,
*
*
kwargs):
#它就是在运行funct(*args,**kwargs),
#此处加上新的功能
res
=
func(
*
args,
*
*
kwargs)
#此时真正的fanc被放到这里运行了,
#此处加上新的功能
return
res
return
inner
#返回inner,此时inner=func,所以
@wrapper
# 先进行wrapper(func)函数运行,return值给func,相当于func=inner(return值)
def
func():
print
(
"func"
)
# ------有参装饰器标准姿势-----
def
outer(flag):
#根据参数flag的情况判断执行内部的功能
def
func(t):
if
flag:
#如果flag为true执行下面添加新功能的用户真正想执行的t函数
def
inner(
*
arg,
*
*
kwargs):
#添加新功能
res
=
t(
*
arg,
*
*
kwargs)
# ==>func()
#添加新功能
return
res
#将添加性功能的函数返回给用户
return
inner
else
:
#如果flag为false执行下面
return
888
return
func
@outer
(flag
=
True
)
#此处先执行这个叫outer(flag=Ture)这个函数(与装饰器无关),得到的值才是真正的装饰器
def
t():
print
(
"t"
)
|