目前我可以使用此命令獲取函數名名稱:的Python:獲取的函數調用此函數
sys._getframe().f_code.co_name
我希望把它的功能是這樣的:
def func_name:
return sys._getframe().f_code.co_name
這函數總是返回'func_name'。是否有可能獲得名稱調用此功能的函數?
目前我可以使用此命令獲取函數名名稱:的Python:獲取的函數調用此函數
sys._getframe().f_code.co_name
我希望把它的功能是這樣的:
def func_name:
return sys._getframe().f_code.co_name
這函數總是返回'func_name'。是否有可能獲得名稱調用此功能的函數?
避免使用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()
如果您發佈的代碼正在爲您工作,那麼請嘗試給_getframe()
一個參數1.該參數告訴要返回哪個幀,並且它默認爲0;你想要1,這意味着幀0被調用。
但是,如果您需要它可以在更多的Python實現上工作,那麼「檢查」模塊可能就是您想要的。
另外,如果你已經有了當前幀並且想要它的父對象,你總是可以使用'f_back'來遍歷堆棧。 – abarnert 2014-08-27 11:11:31
'traceback'給你整個堆棧 - https://docs.python.org/2/library/traceback.html所以我想你可以得到你想要的想要從那裏得到 – doctorlove 2014-08-27 11:02:00
值得注意的是,雖然你可以做到這一點(請參閱afeldspar的答案),99%的時間,當你認爲你想要它(除了調試線程代碼亂七八糟的目的,或通過探索瞭解Python的工作原理),你真的不知道。 – abarnert 2014-08-27 11:12:42