首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

求帮助?装饰器有关问题

2012-03-27 
求帮助??装饰器问题例子如下:Created on 2011-12-9@author: Administrator02 Created on 2011-3-

求帮助??装饰器问题
例子如下:
'''
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!') 

热点排行