【发布时间】:2015-05-03 05:59:20
【问题描述】:
在玩inspect 并在这里阅读其他问题时,我仍然无法弄清楚如何更干净地获取调用者的函数object,而不是通过其路径加载模块然后找到里面的功能。
换句话说,您将如何完成以下操作以使caller() 返回一个方法对象?
import inspect
def caller():
frame = inspect.stack()[2]
code = frame[0]
path = frame[1]
line = frame[2]
name = frame[3] # function NAME string
# TODO: now what?
return func
def cry_wolf():
func = caller()
print "%s cried 'WOLF!'" % (func.__name__,)
def peter():
cry_wolf()
请记住,我已经知道函数名称,但我试图访问的是正在运行调用代码的函数对象。所需的结果是:
peter cried 'WOLF!'
完成!感谢用户 61612,我已经完成了这段代码:
import imp, inspect, sys
def caller():
frame = inspect.stack()[2]
code = frame[0]
path = frame[1]
line = frame[2]
name = frame[3]
return code.f_globals[name]
def cry_wolf():
func = caller()
print "%s cried 'WOLF!'" % (func.__name__,)
def peter():
cry_wolf()
太棒了!
【问题讨论】:
标签: python python-2.7 callstack