使用python装饰器如下
def decoratorFunctionWithArguments(msg):
def wrap(f):
def wrapped_f(*args, **kwargs):
print ...
return f(*args, **kwargs)
return wrapped_f
return wrap
我想打印出函数f
的以下属性:
我可能需要inspect
模块,但我不太确定如何使用什么方法来实现我的目标。或者我可能需要评估一个追溯对象?
答案 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)
这将输出函数的名称以及调用它的模块和行号。