Python中inspect模組的一些認識
阿新 • • 發佈:2018-11-28
學習python時遇到了inspect模組的使用,不甚瞭解,在此簡要的認識一下。
inspect模組主要提供了四種用處:
- 對是否是模組,框架,函式等進行型別檢查。
- 獲取原始碼
- 獲取類或函式的引數資訊
- 解析堆疊
這裡我不詳細的敘述這四種用法,噹噹講一下如何使用inspect獲取類或函式的引數資訊。還是通過程式碼進行說明。
import inspect def test(a=0,b='hello',c=[1,2,3],d={1:2,3:4}): pass params=inspect.signature(test).parameters print('params的型別: ',type(params)) print('params的值: ',params) for name,param in params.items(): print('引數的名字:',name) print('引數的值:',param) print('param.kind的值 ', param.kind) print('param.kind的型別 ',type(param.kind)) print('param.default的值 ',param.default) print('param.default的型別 ',type(param.default))
執行結果為:
params的型別: <class 'mappingproxy'> params的值: OrderedDict([('a', <Parameter "a= >), ('c', <Parameter "c=[1, 2, 3]">), ('d', <P 引數的名字: a 引數的值: a=0 param.kind的值 POSITIONAL_OR_KEYWORD param.kind的型別 <enum '_ParameterKind'> param.default的值 0 param.default的型別 <class 'int'> 引數的名字: b 引數的值: b='hello' param.kind的值 POSITIONAL_OR_KEYWORD param.kind的型別 <enum '_ParameterKind'> param.default的值 hello param.default的型別 <class 'str'> 引數的名字: c 引數的值: c=[1, 2, 3] param.kind的值 POSITIONAL_OR_KEYWORD param.kind的型別 <enum '_ParameterKind'> param.default的值 [1, 2, 3] param.default的型別 <class 'list'> 引數的名字: d 引數的值: d={1: 2, 3: 4} param.kind的值 POSITIONAL_OR_KEYWORD param.kind的型別 <enum '_ParameterKind'> param.default的值 {1: 2, 3: 4} param.default的型別 <class 'dict'>
inspect.signature(test)為提取test函式的簽名;inspect.signature(test).parameters為獲取test的引數資訊。
params為mappingproxy型別,它的值為為引數組成的一個OrderedDict,
inspect.Parameter物件的kind屬性是一個_ParameterKind列舉型別的物件,一共有五種,POSITIONAL_ONLY、VAR_POSITIONAL、KEYWORD_ONLY、VAR_KEYWORD、POSITIONAL_OR_KEYWORD,分別代表著位置引數、可變引數、命名關鍵字引數、關鍵字引數,位置引數或命名關鍵字引數。
inspect.Parameter物件的default屬性將返回引數的預設值,如果沒有,返回一個inspect._empty類。