加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python inspect库

发布时间:2020-12-20 10:14:26 所属栏目:Python 来源:网络整理
导读:一、介绍 inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等。 inspect模块主要提供了四种用处: 对是否是模块、框架、函数进行类型检查 获取源码 获取类或者函数的参数信息 解析堆栈解析堆栈 ?

一、介绍

inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等。

inspect模块主要提供了四种用处:

  1. 对是否是模块、框架、函数进行类型检查
  2. 获取源码
  3. 获取类或者函数的参数信息
  4. 解析堆栈解析堆栈

?

二、常用的方法

1、getargspec(func)

返回一个命名元组ArgSpect(args,varargs,keywords,defaults),
args是函数位置参数名列表,varargs是*参数名,keywords是**参数名,defaults是默认参数值的元组。

# 函数
def f1(a,b,*args,**kwargs):
    pass
    
argspec = inspect.getargspec(f1)
print argspec  # ArgSpec(args=[‘a‘,‘b‘],varargs=‘args‘,keywords=‘kwargs‘,defaults=None)
print argspec.args  # [‘a‘,‘b‘]
print argspec.varargs  # args


# 类方法
class F():
    def f1(self,a,**kwargs):
        pass


argspec = inspect.getargspec(F.f1)
print argspec  # ArgSpec(args=[‘self‘,‘a‘,defaults=None)
print argspec.args  # [‘self‘,‘b‘]
print argspec.varargs  # args

?

2、getsource(object)

返回类或者函数的源码

class F():
    def f1(self,**kwargs):
        pass


print inspect.getsource(F)
print inspect.getsource(F.f1)

?

3、getsourcelines(object)

返回一个元组,元组第一项为对象源代码行的列表,第二项是第一行源代码的行号

class F():
    def f1(self,**kwargs):
        pass


print inspect.getsourcelines(F)
# ([‘class F():n‘,‘    def f1(self,**kwargs):n‘,‘        passn‘],3)
print inspect.getsourcelines(F.f1)
# ([‘    def f1(self,4)

?

4、getmodule(object)

返回定义对象的模块

class F():
    def f1(self,**kwargs):
        pass


print inspect.getmodule(F)  # <module ‘__main__‘ from ‘D:/Projects/test.py‘>
print inspect.getmodule(F.f1)  # <module ‘__main__‘ from ‘D:/Projects/test.py‘>

?

5、ismodule,isclass,ismethod,isfunction,isbuiltin

一系列判断对象类型的方法,大都是包装了isinstance(object,types.FunctionType)之类语句的函数。

?

6.getmembers(object[,predicate])

返回一个包含对象的所有成员的(name,value)列表。返回的内容比对象的__dict__包含的内容多,源码是通过dir()实现的。
predicate是一个可选的函数参数,被此函数判断为True的成员才被返回。

# getmembers的源码
def getmembers(object,predicate=None):
    """Return all members of an object as (name,value) pairs sorted by name.
    Optionally,only return members that satisfy a given predicate."""
    results = []
    for key in dir(object):
        try:
            value = getattr(object,key)
        except AttributeError:
            continue
        if not predicate or predicate(value):
            results.append((key,value))
    results.sort()
    return results

# 示例
class Foo(object):

    def __init__(self,name):
        self.__name = name

    def getname(self):
        return self.__name


print inspect.getmembers(Foo,inspect.ismethod)
结果:
[(__init__,<unbound method Foo.__init__>),(getname,<unbound method Foo.getname>)]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读