标签:一个 code python Python一 ret 增加 self 一句话 *args
装饰器用一句话解释:把对象(函数)及其参数回调到已经给定对象里进行预处理。按照python一切皆对象的观点来看,就是把函数及其参数传到一个对象中进行装饰(处理),是一种对象的调用方式。
最简单的装饰器:
In [4]: def f2(fun): ...: def f1(): ...: res=fun()*2 ...: return res ...: return f1 ...: @f2 ...: def fun(): ...: return 2 ...: a=fun() ...: print(a) 4
增加参数:
1 def f2(fun): 2 def f1(a,b): 3 res=fun(a,b)*2 4 return res 5 return f1 6 @f2 7 def fun(a,b): 8 return a+b 9 df=fun(1,2) 10 print(df)
增加装饰器参数:
1 def f3(c): 2 def f2(fun): 3 def f1(a,b): 4 res=fun(a,b)*2+c 5 return res 6 return f1 7 return f2 8 9 @f3(4) 10 def fun(a,b): 11 return a+b 12 13 df=fun(1,2) 14 15 print(df)
参数高大上一点:
1 def f3(c): 2 def f2(fun): 3 def f1(*args,**kwargs): 4 res=fun(*args,**kwargs)*2+c 5 return res 6 return f1 7 return f2 8 9 @f3(4) 10 def fun(a,b): 11 return a+b 12 13 df=fun(1,2) 14 15 print(df)
class对象的装饰器:
class c: def __init__(self,fun): self.fun=fun def __call__(self): res=self.fun()*2 return res @c def fun(): return 2 df=fun() print(df)
带参数的class对象装饰器:
class c:
def __init__(self,fun):
self.fun=fun
def __call__(self,*args,**kw):
res=self.fun(*args,**kw)
return res
@c
def fun(a,b):
return a+b
df=fun(1,2)
print(df)
@c#注意,传入的是c1这个对象,装饰器c的__call__函数里的参数是处理的f3里面的参数,需要和f3函数参数对应,实际上fun映射了c1
class c1():
def f3(self,a,b):
return a+b
df=c1().f3(1,2)
print(df)
class装饰器带参数
class C:
def __init__(self,a1=0):
self.a=a1
#pass
def __call__(self,fun):
def _call(*args,**kw):
res=fun(*args,**kw)*2*self.a
#print(res)
return res
return _call
class C1():
@C(6)
def f3(self,a,b):
return a+b
df=C1().f3(1,2)
print(df)
标签:一个 code python Python一 ret 增加 self 一句话 *args
原文地址:https://www.cnblogs.com/hikingyu/p/10362203.html