1. 程式人生 > >Python中inspect模組的一些認識

Python中inspect模組的一些認識

學習python時遇到了inspect模組的使用,不甚瞭解,在此簡要的認識一下。

inspect模組主要提供了四種用處:

  1. 對是否是模組,框架,函式等進行型別檢查。
  2. 獲取原始碼
  3. 獲取類或函式的引數資訊
  4. 解析堆疊

這裡我不詳細的敘述這四種用法,噹噹講一下如何使用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類。