python文件编译成so文件后用不了inspect函数_python inspect库

一、介绍

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

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

对是否是模块、框架、函数进行类型检查

获取源码

获取类或者函数的参数信息

解析堆栈解析堆栈

二、常用的方法

1、getargspec(func)

返回一个命名元组ArgSpect(args, varargs, keywords, defaults),

args是函数位置参数名列表,varargs是*参数名,keywords是**参数名,defaults是默认参数值的元组。

#函数

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

print argspec.args #['a', 'b']

print argspec.varargs #args

#类方法

classF():def f1(self, a, b, *args, **kwargs):passargspec=inspect.getargspec(F.f1)print argspec #ArgSpec(args=['self', 'a', 'b'], varargs='args', keywords='kwargs', defaults=None)

print argspec.args #['self', 'a', 'b']

print argspec.varargs #args

2、getsource(object)

返回类或者函数的源码

classF():def f1(self, a, b, *args, **kwargs):pass

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

3、getsourcelines(object)

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

classF():def f1(self, a, b, *args, **kwargs):pass

printinspect.getsourcelines(F)#(['class F():\n', ' def f1(self, a, b, *args, **kwargs):\n', ' pass\n'], 3)

printinspect.getsourcelines(F.f1)#([' def f1(self, a, b, *args, **kwargs):\n', ' pass\n'], 4)

4、getmodule(object)

返回定义对象的模块

classF():def f1(self, a, b, *args, **kwargs):pass

print inspect.getmodule(F) #

print inspect.getmodule(F.f1) #

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 indir(object):try:

value=getattr(object, key)exceptAttributeError:continue

if not predicate orpredicate(value):

results.append((key, value))

results.sort()returnresults#示例

classFoo(object):def __init__(self, name):

self.__name =namedefgetname(self):return self.__name

printinspect.getmembers(Foo, inspect.ismethod)

结果:

[('__init__', ), ('getname', )]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值