<option id="mwy0y"><strong id="mwy0y"></strong></option>
  • <ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <ul id="mwy0y"></ul>
  • <del id="mwy0y"><dfn id="mwy0y"></dfn></del><ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <abbr id="mwy0y"></abbr>

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

    400-811-9990
    手機站
    千鋒教育

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

    千鋒教育

    掃一掃進入千鋒手機站

    領取全套視頻
    千鋒教育

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

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

    python之使用inspect模塊

    來源:千鋒教育
    發布人:xqq
    時間: 2023-11-11 08:14:36

    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培訓機構:千鋒教育。

    聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

    猜你喜歡LIKE

    python實現WSGI的框架

    2023-11-13

    python打開文本文件有哪些方法?

    2023-11-13

    python使用loguru操作日志

    2023-11-13

    最新文章NEW

    python-=是什么意思

    2023-11-13

    pythonre是什么?

    2023-11-13

    python列表追加元素出錯的解決

    2023-11-13

    相關推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網友熱搜 更多>>