inspect python_python之inspect模块
inspect模塊主要提供了四種用處:
1.對是否是模塊、框架、函數(shù)進(jìn)行類型檢查
2.獲取源碼
3.獲取類或者函數(shù)的參數(shù)信息
4.解析堆棧
一、type and members
1. inspect.getmembers(object[, predicate])
第二個參數(shù)通??梢愿鶕?jù)需要調(diào)用如下16個方法;
返回值為object的所有成員,以(name,value)對組成的列表
inspect.ismodule(object): 是否為模塊
inspect.isclass(object):是否為類
inspect.ismethod(object):是否為方法(bound method written in python)
inspect.isfunction(object):是否為函數(shù)(python function, including lambda expression)
inspect.isgeneratorfunction(object):是否為python生成器函數(shù)
inspect.isgenerator(object):是否為生成器
inspect.istraceback(object): 是否為traceback
inspect.isframe(object):是否為frame
inspect.iscode(object):是否為code
inspect.isbuiltin(object):是否為built-in函數(shù)或built-in方法
inspect.isroutine(object):是否為用戶自定義或者built-in函數(shù)或方法
inspect.isabstract(object):是否為抽象基類
inspect.ismethoddescriptor(object):是否為方法標(biāo)識符
inspect.isdatadescriptor(object):是否為數(shù)字標(biāo)識符,數(shù)字標(biāo)識符有__get__ 和__set__屬性; 通常也有__name__和__doc__屬性
inspect.isgetsetdescriptor(object):是否為getset descriptor
inspect.ismemberdescriptor(object):是否為member descriptor
inspect的getmembers()方法可以獲取對象(module、class、method等)的如下屬性:
TypeAttributeDescriptionNotes
module
__doc__
documentation string
__file__
filename (missing for built-in modules)
class
__doc__
documentation string
__module__
name of module in which this class was defined
method
__doc__
documentation string
__name__
name with which this method was defined
im_class
class object that asked for this method
(1)
im_func or __func__
function object containing implementation of method
im_self or __self__
instance to which this method is bound, or None
function
__doc__
documentation string
__name__
name with which this function was defined
func_code
code object containing compiled function bytecode
func_defaults
tuple of any default values for arguments
func_doc
(same as __doc__)
func_globals
global namespace in which this function was defined
func_name
(same as __name__)
generator
__iter__
defined to support iteration over container
close
raises new GeneratorExit exception inside the generator to terminate the iteration
gi_code
code object
gi_frame
frame object or possibly None once the generator has been exhausted
gi_running
set to 1 when generator is executing, 0 otherwise
next
return the next item from the container
send
resumes the generator and “sends” a value that becomes the result of the current yield-expression
throw
used to raise an exception inside the generator
traceback
tb_frame
frame object at this level
tb_lasti
index of last attempted instruction in bytecode
tb_lineno
current line number in Python source code
tb_next
next inner traceback object (called by this level)
frame
f_back
next outer frame object (this frame’s caller)
f_builtins
builtins namespace seen by this frame
f_code
code object being executed in this frame
f_exc_traceback
traceback if raised in this frame, or None
f_exc_type
exception type if raised in this frame, or None
f_exc_value
exception value if raised in this frame, or None
f_globals
global namespace seen by this frame
f_lasti
index of last attempted instruction in bytecode
f_lineno
current line number in Python source code
f_locals
local namespace seen by this frame
f_restricted
0 or 1 if frame is in restricted execution mode
f_trace
tracing function for this frame, or None
code
co_argcount
number of arguments (not including * or ** args)
co_code
string of raw compiled bytecode
co_consts
tuple of constants used in the bytecode
co_filename
name of file in which this code object was created
co_firstlineno
number of first line in Python source code
co_flags
bitmap: 1=optimized | 2=newlocals | 4=*arg |8=**arg
co_lnotab
encoded mapping of line numbers to bytecode indices
co_name
name with which this code object was defined
co_names
tuple of names of local variables
co_nlocals
number of local variables
co_stacksize
virtual machine stack space required
co_varnames
tuple of names of arguments and local variables
builtin
__doc__
documentation string
__name__
original name of this function or method
__self__
instance to which a method is bound, or None
2. inspect.getmoduleinfo(path): 返回一個命名元組(name, suffix, mode, module_type)
name:模塊名(不包括其所在的package)
suffix:
mode:open()方法的模式,如:'r', 'a'等
module_type: 整數(shù),代表了模塊的類型
3. inspect.getmodulename(path):根據(jù)path返回模塊名(不包括其所在的package)
二、Retrieving source code
1. inspect.getdoc(object): 獲取object的documentation信息
2. inspect.getcomments(object)
3. inspect.getfile(object): 返回對象的文件名
4. inspect.getmodule(object):返回object所屬的模塊名
5. inspect.getsourcefile(object): 返回object的python源文件名;object不能使built-in的module, class, mothod
6. inspect.getsourcelines(object):返回object的python源文件代碼的內(nèi)容,行號+代碼行
7. inspect.getsource(object):以string形式返回object的源代碼
8. inspect.cleandoc(doc):
三、class and functions
1. inspect.getclasstree(classes[, unique])
2. inspect.getargspec(func)
3. inspect.getargvalues(frame)
4. inspect.formatargspec(args[, varargs, varkw, defaults, formatarg, formatvarargs, formatvarkw, formatvalue, join])
5. inspect.formatargvalues(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue, join])
6. inspect.getmro(cls): 元組形式返回cls類的基類(包括cls類),以method resolution順序;通常cls類為元素的第一個元素
7. inspect.getcallargs(func[, *args][, **kwds]):將args和kwds參數(shù)到綁定到為func的參數(shù)名;對bound方法,也綁定第一個參數(shù)(通常為self)到相應(yīng)的實例;返回字典,對應(yīng)參數(shù)名及其值;
>>> from inspect import getcallargs
>>> def f(a, b=1, *pos, **named):
... pass
>>> getcallargs(f, 1, 2, 3)
{'a': 1, 'named': {}, 'b': 2, 'pos': (3,)}
>>> getcallargs(f, a=2, x=4)
{'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()}
>>> getcallargs(f)
Traceback (most recent call last):
...
TypeError: f() takes at least 1 argument (0 given)
四、The interpreter stack
1. inspect.getframeinfo(frame[, context])
2. inspect.getouterframes(frame[, context])
3. inspect.getinnerframes(traceback[, context])
4. inspect.currentframe()
5. inspect.stack([context])
6. inspect.trace([context])
總結(jié)
以上是生活随笔為你收集整理的inspect python_python之inspect模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: learn python app v3_
- 下一篇: 微信聊天记录云存储多少钱 云储存怎么收费