读书人

求帮助?装饰器有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

求帮助??装饰器问题
例子如下:
'''
Created on 2011-12-9

@author: Administrator
'''

'''

02 Created on 2011-3-23

03

04 @author: Administrator

05 '''

from time import time



def logged (when):

def log(f, *args, **kargs):

print('''called:

function: %s

args :%r

kargs:%r''' % (f, args, kargs))



def pre_logged(f):

def wrapper(*args, **kargs):

log(f, *args, **kargs)

print('in pre_logged')

return f(*args, **kargs)

return wrapper



def post_logged(f):

def wrapper(*args, **kargs):
print('in post_logged *')

now = time()

try:

return f(*args, **kargs)

finally:

log(f, *args, **kargs)

print('time delta: %s' % (time() - now))

print('in post_logged')

return wrapper



try:

return {"pre":pre_logged, "post":post_logged}[when]

except KeyError as e:

raise ValueError(e)('must be "pre" or "post" ')



@logged('pre')

@logged('post')

def hello(name):

print('hello, ', name)





hello('world!')



请问一下这个代码的执行过程是怎么样的??
它是怎么会去调用pre_logged和post_logged函数的????

[解决办法]
前面说的像嵌套函数调用可能说得不太对,你自己google几篇文件再理解一下吧。
又重新看了下代码和文章,并运行了几次,好像理解点了:


Python code
@logged('pre')@logged('post')def hello(name):    print('hello, ', name)hello('world!') 

读书人网 >perl python

热点推荐