2014-08-27 90 views
1

目前我可以使用此命令獲取函數名名稱:的Python:獲取的函數調用此函數

sys._getframe().f_code.co_name 

我希望把它的功能是這樣的:

def func_name: 
    return sys._getframe().f_code.co_name 

這函數總是返回'func_name'。是否有可能獲得名稱調用此功能的函數?

+0

'traceback'給你整個堆棧 - https://docs.python.org/2/library/traceback.html所以我想你可以得到你想要的想要從那裏得到 – doctorlove 2014-08-27 11:02:00

+2

值得注意的是,雖然你可以做到這一點(請參閱afeldspar的答案),99%的時間,當你認爲你想要它(除了調試線程代碼亂七八糟的目的,或通過探索瞭解Python的工作原理),你真的不知道。 – abarnert 2014-08-27 11:12:42

回答

1

避免使用sys._getframe

import inspect 

def bar(): 
    current_frame = inspect.currentframe() 
    previous_frame = current_frame.f_back 
    print previous_frame.f_code.co_name 

def foo(): 
    bar() 

foo() 
2

如果您發佈的代碼正在爲您工作,那麼請嘗試給_getframe()一個參數1.該參數告訴要返回哪個幀,並且它默認爲0;你想要1,這意味着幀0被調用。

但是,如果您需要它可以在更多的Python實現上工作,那麼「檢查」模塊可能就是您想要的。

+0

另外,如果你已經有了當前幀並且想要它的父對象,你總是可以使用'f_back'來遍歷堆棧。 – abarnert 2014-08-27 11:11:31