按字符串名称获取修饰的函数对象

evg*_*evg 1 python string function decorator

def log(func):
    def wraper(*a, **kw):   
        return func(*a, **kw)
    return wraper

@log
def f():
    print 'f'


print locals()['f'] # - prints <function wraper at 0x00CBF3F0>.
Run Code Online (Sandbox Code Playgroud)

你如何获得真正的f对象(不是装饰器包装)?

Ned*_*der 7

functools模块还提供了wraps装饰,这使得确保包装的函数看起来更像是真正的功能:正确的名称,模块和文档字符串,例如.


小智 5

你没有.1 如果您以后需要访问它,请将其存储.

def log(func):
  def wrapper(*a, **kw):
    return func(*a, **kw)
  wrapper.func = func
  return wrapper

@log
def f():
  print 'f'

print f.func
Run Code Online (Sandbox Code Playgroud)

1你可以搞乱关闭,但我不推荐它.