千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > python之使用inspect模塊

python之使用inspect模塊

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-11-07 17:53:10 1699350790

inspect模塊提供了一系列函數(shù)用于幫助使用自省。下面僅列出較常用的一些函數(shù),想獲得全部的函數(shù)資料可以查看inspect模塊的文檔。

1.檢查對(duì)象類型

is{module|class|function|method|builtin}(obj):

檢查對(duì)象是否為模塊、類、函數(shù)、方法、內(nèi)建函數(shù)或方法。

isroutine(obj):

用于檢查對(duì)象是否為函數(shù)、方法、內(nèi)建函數(shù)或方法等等可調(diào)用類型。用這個(gè)方法會(huì)比多個(gè)is*()更方便,不過(guò)它的實(shí)現(xiàn)仍然是用了多個(gè)is*()。

im=cat.sayHi

ifinspect.isroutine(im):

im()

對(duì)于實(shí)現(xiàn)了__call__的類實(shí)例,這個(gè)方法會(huì)返回False。如果目的是只要可以直接調(diào)用就需要是True的話,不妨使用isinstance(obj,collections.Callable)這種形式。我也不知道為什么Callable會(huì)在collections模塊中,抱歉!我猜大概是因?yàn)閏ollections模塊中包含了很多其他的ABC(AbstractBaseClass)的緣故吧:)

2.獲取對(duì)象信息

getmembers(object[,predicate]):

這個(gè)方法是dir()的擴(kuò)展版,它會(huì)將dir()找到的名字對(duì)應(yīng)的屬性一并返回,形如[(name,value),...]。另外,predicate是一個(gè)方法的引用,如果指定,則應(yīng)當(dāng)接受value作為參數(shù)并返回一個(gè)布爾值,如果為False,相應(yīng)的屬性將不會(huì)返回。使用is*作為第二個(gè)參數(shù)可以過(guò)濾出指定類型的屬性。

getmodule(object):

還在為第2節(jié)中的__module__屬性只返回字符串而遺憾嗎?這個(gè)方法一定可以滿足你,它返回object的定義所在的模塊對(duì)象。

get{file|sourcefile}(object):

獲取object的定義所在的模塊的文件名|源代碼文件名(如果沒(méi)有則返回None)。用于內(nèi)建的對(duì)象(內(nèi)建模塊、類、函數(shù)、方法)上時(shí)會(huì)拋出TypeError異常。

get{source|sourcelines}(object):

獲取object的定義的源代碼,以字符串|字符串列表返回。代碼無(wú)法訪問(wèn)時(shí)會(huì)拋出IOError異常。只能用于module/class/function/method/code/frame/traceack對(duì)象。

getargspec(func):

僅用于方法,獲取方法聲明的參數(shù),返回元組,分別是(普通參數(shù)名的列表,*參數(shù)名,**參數(shù)名,默認(rèn)值元組)。如果沒(méi)有值,將是空列表和3個(gè)None。如果是2.6以上版本,將返回一個(gè)命名元組(NamedTuple),即除了索引外還可以使用屬性名訪問(wèn)元組中的元素。

defadd(x,y=1,*z):

returnx+y+sum(z)

printinspect.getargspec(add)

#ArgSpec(args=['x','y'],varargs='z',keywords=None,defaults=(1,))

getargvalues(frame):

僅用于棧幀,獲取棧幀中保存的該次函數(shù)調(diào)用的參數(shù)值,返回元組,分別是(普通參數(shù)名的列表,*參數(shù)名,**參數(shù)名,幀的locals())。如果是2.6以上版本,將返回一個(gè)命名元組(NamedTuple),即除了索引外還可以使用屬性名訪問(wèn)元組中的元素。

defadd(x,y=1,*z):

printinspect.getargvalues(inspect.currentframe())

returnx+y+sum(z)

add(2)

#ArgInfo(args=['x','y'],varargs='z',keywords=None,locals={'y':1,'x':2,'z':()})

getcallargs(func[,*args][,**kwds]):

返回使用args和kwds調(diào)用該方法時(shí)各參數(shù)對(duì)應(yīng)的值的字典。這個(gè)方法僅在2.7版本中才有。

getmro(cls):

返回一個(gè)類型元組,查找類屬性時(shí)按照這個(gè)元組中的順序。如果是新式類,與cls.__mro__結(jié)果一樣。但舊式類沒(méi)有__mro__這個(gè)屬性,直接使用這個(gè)屬性會(huì)報(bào)異常,所以這個(gè)方法還是有它的價(jià)值的。

printinspect.getmro(Cat)

#(,)

printCat.__mro__

#(,)

classDog:pass

printinspect.getmro(Dog)

#(,)

printDog.__mro__#AttributeError

currentframe():

返回當(dāng)前的棧幀對(duì)象。

以上內(nèi)容為大家介紹了python之使用inspect模塊,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
python 序列化及其相關(guān)模塊

什么是序列化對(duì)象?我們把對(duì)象(變量)從內(nèi)存中編程可存儲(chǔ)或傳輸?shù)倪^(guò)程稱之為序列化,在python中稱為pickle,其他語(yǔ)言稱之為serialization,marshal...詳情>>

2023-11-07 20:42:23
python生成器函數(shù)

為什么叫生成器函數(shù)?因?yàn)樗S著時(shí)間的推移生成了一個(gè)數(shù)值隊(duì)列。一般的函數(shù)在執(zhí)行完畢之后會(huì)返回一個(gè)值然后退出,但是生成器函數(shù)會(huì)自動(dòng)掛起,然...詳情>>

2023-11-07 20:31:35
python 字典操作方法詳解

字典是一種通過(guò)名字或者關(guān)鍵字引用的得數(shù)據(jù)結(jié)構(gòu),key類型需要時(shí)被哈希,其鍵可以是數(shù)字、字符串、元組,這種結(jié)構(gòu)類型也稱之為映射。字典類型是P...詳情>>

2023-11-07 20:09:59
python 集合操作方法詳解

集合set集合用于包含一組無(wú)序的對(duì)象。與列表和元組不同,集合是無(wú)序的,也無(wú)法通過(guò)數(shù)字進(jìn)行索引。此外,集合中的元素不能重復(fù)。set和dict一樣,...詳情>>

2023-11-07 20:06:23
Python性能分析

python標(biāo)準(zhǔn)庫(kù)提供兩個(gè)代碼性能分析相關(guān)的模塊,即timeit和cProfile/profile。前者更適合測(cè)試簡(jiǎn)短的代碼片段,后者則可分析代碼片段乃至整體模塊...詳情>>

2023-11-07 19:23:11