溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python獲取當(dāng)前函數(shù)名稱(chēng)方法實(shí)例分享

發(fā)布時(shí)間:2020-08-26 14:22:14 來(lái)源:腳本之家 閱讀:179 作者:kwsy2008 欄目:開(kāi)發(fā)技術(shù)

本文實(shí)例主要是Python中獲取當(dāng)前運(yùn)行函數(shù)的名稱(chēng),具體如下。

python 具有強(qiáng)大的自省能力,在函數(shù)運(yùn)行時(shí),可以在函數(shù)內(nèi)部獲取到當(dāng)前所在的函數(shù)名稱(chēng),請(qǐng)看示例代碼

#coding=utf-8 
import sys 
import inspect 
 
def my_name(): 
 print '1' ,sys._getframe().f_code.co_name 
 print '2' ,inspect.stack()[0][3] 
 
def get_current_function_name(): 
 print '5', sys._getframe().f_code.co_name 
 return inspect.stack()[1][3] 
class MyClass: 
 def function_one(self): 
  print '3',inspect.stack()[0][3] 
  print '4', sys._getframe().f_code.co_name 
  print "6 %s.%s invoked"%(self.__class__.__name__, get_current_function_name()) 
 
if __name__ == '__main__': 
 my_name() 
 myclass = MyClass() 
 myclass.function_one() 

示例演示了兩種獲取當(dāng)前所在函數(shù)名稱(chēng)的方法,一種是用sys內(nèi)置模塊,一種是使用inspect模塊。運(yùn)行結(jié)果如下:

1 my_name 
2 my_name 
3 function_one 
4 function_one 
5 get_current_function_name 
6 MyClass.function_one invoked 

sys.getframe().f_code.co_name 方法永遠(yuǎn)獲取當(dāng)前所在的函數(shù)名稱(chēng),inspect.stack()方法相對(duì)更靈活一些,在get_current_function_name函數(shù)中,sys獲取的函數(shù)名稱(chēng)是get_cu
rrent_function_name,而inspect方法返回的結(jié)果是function_one。inspect.stack記錄了當(dāng)前的棧內(nèi)信息,想進(jìn)一步了解可以打印inspect.stack()信息。

我在function_one函數(shù)中調(diào)用了get_current_function_name,因此inspect.stack()返回的list中的第一個(gè)元組是有關(guān)get_current_function_name信息的,

第二個(gè)元組才是function_one的相關(guān)信息。

總結(jié)

以上就是本文關(guān)于Python獲取當(dāng)前函數(shù)名稱(chēng)方法實(shí)例分享的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI