python inspect库
一、介绍
inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等。
inspect模块主要提供了四种用处:
- 对是否是模块、框架、函数进行类型检查
- 获取源码
- 获取类或者函数的参数信息
- 解析堆栈解析堆栈
二、常用的方法
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, b, *args, **kwargs):
pass argspec = 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)
返回类或者函数的源码
class F():
def f1(self, a, b, *args, **kwargs):
pass print inspect.getsource(F)
print inspect.getsource(F.f1)
3、getsourcelines(object)
返回一个元组,元组第一项为对象源代码行的列表,第二项是第一行源代码的行号
class F():
def f1(self, a, b, *args, **kwargs):
pass print inspect.getsourcelines(F)
# (['class F():\n', ' def f1(self, a, b, *args, **kwargs):\n', ' pass\n'], 3)
print inspect.getsourcelines(F.f1)
# ([' def f1(self, a, b, *args, **kwargs):\n', ' pass\n'], 4)
4、getmodule(object)
返回定义对象的模块
class F():
def f1(self, a, b, *args, **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>)]
python inspect库的更多相关文章
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- 转--Python标准库之一句话概括
作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...
- Python 标准库一览(Python进阶学习)
转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...
- Python标准库笔记(9) — functools模块
functools 作用于函数的函数 functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们. 装饰器 partial 类是 functools 模块提供的主要工具, ...
- python 标准库大全
python 标准库 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 string ...
- python+paramiko库+svn写的自动化部署脚本
第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- Python标准库14 数据库 (sqlite3)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...
- 常用python机器学习库总结
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
随机推荐
- leetcode17 电话号码的字母组合 dfs
就dfs吧.... 然后,我傻了.前一道题不用考虑空,这道题就要考虑.... 还有注意vector要引用传递 class Solution { public: void dfs(string temp ...
- python sort() sorted()的区别
sorted不保存 sort保存:
- 为树莓派3B添加LCD1602液晶屏
树莓派3B针脚说明 LCD1602接线说明 VSS,接地VDD,接5V电源VO,液晶对比度调节,接电位器中间的引脚,电位器两边的引脚分别接5V和接地.RS,寄存器选择,接GPIO14RW,读写选择,接 ...
- unity编辑器扩展学习
扩展编辑器实际上就是在unity菜单栏中添加一些按钮,可以一键执行一些重复性的工作. 一.添加按钮 1.简单使用MenuItem特性 using UnityEngine; using UnityEdi ...
- μC/OS-III---I笔记8---事件标志
当任务需要同步时可以使用信号量.A任务给B任务发送消息后B任务才能继续运行.如果需要A任务给任务B传递数据的时候就可以采用消息队列.但对于繁杂任务的同步,比如多个时间发生以后执行一个事件,或者是C任务 ...
- HTML a Tag All In One
HTML a Tag All In One HTML <a> target https://developer.mozilla.org/en-US/docs/Web/HTML/Elemen ...
- select notes mark
select notes mark mark-line https://time.geekbang.org/column/article/224545
- c++ 去掉字符串首尾空格
http://www.cplusplus.com/reference/regex/regex_replace/ #include <iostream> #include <regex ...
- HANNAH WHITE:不拖延的人生是什么样子的?
不拖延的人生,究竟是什么样子呢?近日,星盟投资总经理HANNAH在一档人物采访栏目中表示,不拖延的人生,真的是太爽了! HANNAH在栏目中讲了一个曾经公司同事的故事.她说,那位同事总是喜欢拖延.每次 ...
- 内核栈与thread_info结构详解
本文转载自内核栈与thread_info结构详解 什么是进程的内核栈? 在内核态(比如应用进程执行系统调用)时,进程运行需要自己的堆栈信息(不是原用户空间中的栈),而是使用内核空间中的栈,这个栈就是进 ...