在Python 2.7中获取调用方的函数对象?

在Python 2.7中获取调用方的函数对象?,python,python-2.7,callstack,Python,Python 2.7,Callstack,在玩inspect并阅读此处的其他问题时,我仍然无法理解如何更清晰地获取调用方的函数对象,而不是按照其路径加载模块,然后在其中查找函数 换句话说,您将如何完成以下操作,以便caller()返回一个方法对象 import inspect def caller(): frame = inspect.stack()[2] code = frame[0] path = frame[1] line = frame[2] name = frame[3] # fun

在玩
inspect
并阅读此处的其他问题时,我仍然无法理解如何更清晰地获取调用方的函数对象,而不是按照其路径加载模块,然后在其中查找函数

换句话说,您将如何完成以下操作,以便
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()
太棒了

帧对象具有以下特性:

导入检查
def caller():
tup=inspect.stack()[2]
返回tup[0].f_globals[tup[3]]
狼叫了一声:
func=调用方()
打印(“%s喊‘狼’!”%(func.\u name\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu,)35;彼得喊‘狼’
彼得():
狼来了

这太棒了,只是因为我输入的堆栈帧不是
[2]
,而是
[1]
,所以您最终使用了错误的帧。我把你的代码改编成我的解决方案,我把它放在问题里。谢谢大家!@是的,我不确定这是不是正确的框架:)@NeilC.Obremski不管怎样,我更新了答案以澄清问题
import inspect

def caller():
    tup = inspect.stack()[2]
    return tup[0].f_globals[tup[3]] # <function peter at address>

def cry_wolf():
    func = caller()
    print("%s cried 'WOLF!'" % (func.__name__,)) # peter cried 'WOLF!'

def peter():
    cry_wolf()