b*******t 发帖数: 34 | 1 新手问个问题。下面的PYTHON程序
在decorator里面是怎么绑定的? 这个程序里
n <---5
func <---LLL
args,kwds <--- a,b (or 1,1)
是什么样的规则?
========================
> cat a.py
def XXX(n):
def Wrapper (func):
def S(*args,**kwds):
for i in xrange(n):
print 20+func(*args, **kwds), ","
return S
return Wrapper
@XXX(5)
def LLL(a,b):
return a+b+1
print LLL(1,1)
========================
》python a.py
23 ,
23 ,
23 ,
23 ,
23 ,
None | m********2 发帖数: 89 | 2 @XXX(5)
def LLL():
...
is the same as
def LLL():
...
LLL = XXX(5)(LLL)
so the new LLL is the same as
def S(*args,**kwds):
for i in xrange(5):
print 20+LLL(*args, **kwds), ","
return S
【在 b*******t 的大作中提到】 : 新手问个问题。下面的PYTHON程序 : 在decorator里面是怎么绑定的? 这个程序里 : n <---5 : func <---LLL : args,kwds <--- a,b (or 1,1) : 是什么样的规则? : ======================== : > cat a.py : def XXX(n): : def Wrapper (func):
| b*******t 发帖数: 34 | 3 thanks
Wrapper的作用是什么?
def Wrapper (func):
或者说, 为什么需要定义Wrapper?
另外一个问题, XXX(5)打印了5次。 如果我想再把XXX包一次,比如YYY(3,5)调
用XXX(5)三次, 代码怎么写?
【在 m********2 的大作中提到】 : @XXX(5) : def LLL(): : ... : is the same as : def LLL(): : ... : LLL = XXX(5)(LLL) : so the new LLL is the same as : def S(*args,**kwds): : for i in xrange(5):
| m********2 发帖数: 89 | 4 In your code, you need "Wrapper" to bind the "func" var inside "S" to the
original "LLL".
def YYY(n):
def decor2(f):
def wrapper(*args, **kws):
for i in range(n):
f(*args, **kws)
return wrapper
return decor2
@YYY(3)
@XXX(5)
def LLL():
...
【在 b*******t 的大作中提到】 : thanks : Wrapper的作用是什么? : def Wrapper (func): : 或者说, 为什么需要定义Wrapper? : 另外一个问题, XXX(5)打印了5次。 如果我想再把XXX包一次,比如YYY(3,5)调 : 用XXX(5)三次, 代码怎么写?
|
|