有关装饰器

一:

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" )

猜你喜欢

转载自www.cnblogs.com/LL97155472/p/10583610.html