一:
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" ) |
原文:https://www.cnblogs.com/LL97155472/p/10583610.html