<abbr id="ciwa6"><option id="ciwa6"></option></abbr>
  • <sup id="ciwa6"><kbd id="ciwa6"></kbd></sup>
    <small id="ciwa6"></small>
  • 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

    400-811-9990
    手機(jī)站
    千鋒教育

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

    千鋒教育

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

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

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

    上海
    • 北京
    • 鄭州
    • 武漢
    • 成都
    • 西安
    • 沈陽
    • 廣州
    • 南京
    • 深圳
    • 大連
    • 青島
    • 杭州
    • 重慶
    當(dāng)前位置:成都千鋒IT培訓(xùn)  >  技術(shù)干貨  >  python之使用inspect模塊

    python之使用inspect模塊

    來源:千鋒教育
    發(fā)布人:xqq
    時間: 2023-11-05 21:20:39

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

    1.檢查對象類型

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

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

    isroutine(obj):

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

    im=cat.sayHi

    ifinspect.isroutine(im):

    im()

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

    2.獲取對象信息

    getmembers(object[,predicate]):

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

    getmodule(object):

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

    get{file|sourcefile}(object):

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

    get{source|sourcelines}(object):

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

    getargspec(func):

    僅用于方法,獲取方法聲明的參數(shù),返回元組,分別是(普通參數(shù)名的列表,*參數(shù)名,**參數(shù)名,默認(rèn)值元組)。如果沒有值,將是空列表和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):

    僅用于棧幀,獲取棧幀中保存的該次函數(shù)調(diào)用的參數(shù)值,返回元組,分別是(普通參數(shù)名的列表,*參數(shù)名,**參數(shù)名,幀的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調(diào)用該方法時各參數(shù)對應(yīng)的值的字典。這個方法僅在2.7版本中才有。

    getmro(cls):

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

    printinspect.getmro(Cat)

    #(,)

    printCat.__mro__

    #(,)

    classDog:pass

    printinspect.getmro(Dog)

    #(,)

    printDog.__mro__#AttributeError

    currentframe():

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

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

    聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

    猜你喜歡LIKE

    python delattr函數(shù)如何使用?

    2023-11-10

    python time.strptime的格式化

    2023-11-10

    pythonGIL在Python多線程的應(yīng)用

    2023-11-10

    最新文章NEW

    python中pdb模塊怎么用?

    2023-11-10

    Python如何截圖保存?

    2023-11-10

    python?中缺少module怎么辦?

    2023-11-10

    相關(guān)推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網(wǎng)友熱搜 更多>>