如何使用python获取有关装饰器内部函数的信息?

时间:2014-08-18 14:17:17

标签: python inspect

使用python装饰器如下

def decoratorFunctionWithArguments(msg):  
    def wrap(f):
        def wrapped_f(*args, **kwargs):
            print ...
            return f(*args, **kwargs)
        return wrapped_f
    return wrap

我想打印出函数f的以下属性:

  • 功能名称
  • 调用此函数的模块的名称。
  • 此功能被称为
  • 的模块行

我可能需要inspect模块,但我不太确定如何使用什么方法来实现我的目标。或者我可能需要评估一个追溯对象?

1 个答案:

答案 0 :(得分:3)

可以使用sys._getframe:

在CPython中检索此信息
import sys

def mywrapper(msg):
    def wrap(f):
        def wrapped_f(*args, **kwargs):
            f_back = sys._getframe().f_back
            print f.__name__, f_back.f_code.co_filename, f_back.f_lineno
            return f(*args, **kwargs)
        return wrapped_f
    return wrap

@mywrapper("message")
def f(x):
    return x*x

f(3)

这将输出函数的名称以及调用它的模块和行号。