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类。

猜你喜欢

转载自blog.csdn.net/dxk_093812/article/details/84581487
今日推荐