国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > python之使用inspect模塊

python之使用inspect模塊

來源:千鋒教育
發布人:xqq
時間: 2023-11-07 17:53:10 1699350790

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

1.檢查對象類型

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

檢查對象是否為模塊、類、函數、方法、內建函數或方法。

isroutine(obj):

用于檢查對象是否為函數、方法、內建函數或方法等等可調用類型。用這個方法會比多個is*()更方便,不過它的實現仍然是用了多個is*()。

im=cat.sayHi

ifinspect.isroutine(im):

im()

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

2.獲取對象信息

getmembers(object[,predicate]):

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

getmodule(object):

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

get{file|sourcefile}(object):

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

get{source|sourcelines}(object):

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

getargspec(func):

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

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

returnx+y+sum(z)

printinspect.getargspec(add)

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

getargvalues(frame):

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

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調用該方法時各參數對應的值的字典。這個方法僅在2.7版本中才有。

getmro(cls):

返回一個類型元組,查找類屬性時按照這個元組中的順序。如果是新式類,與cls.__mro__結果一樣。但舊式類沒有__mro__這個屬性,直接使用這個屬性會報異常,所以這個方法還是有它的價值的。

printinspect.getmro(Cat)

#(,)

printCat.__mro__

#(,)

classDog:pass

printinspect.getmro(Dog)

#(,)

printDog.__mro__#AttributeError

currentframe():

返回當前的棧幀對象。

以上內容為大家介紹了python之使用inspect模塊,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。

tags: python培訓
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT