在Python中检查模块
检查模块有助于检查我们编写的代码中存在的对象。由于Python是一种 OOP 语言,所有编写的代码基本上都是这些对象之间的交互,因此检查模块在检查某些模块或某些对象时变得非常有用。我们还可以使用它来详细分析某些函数调用或回溯,以便更轻松地进行调试。
inspect模块提供了很多方法,这些方法可以分为两类,即验证令牌类型的方法和检索令牌来源的方法。下面提到了这两个类别中最常用的方法。
验证令牌类型的方法:
- isclass():如果该对象是类,则isclass()方法返回 True,否则返回 false。当它与getmembers()函数结合使用时,它会显示类及其类型。它用于检查实时课程。
例子:
Python3
# import required modules
import inspect
# create class
class A(object):
pass
# use isclass()
print(inspect.isclass(A))
Python3
# import required modules
import inspect
import numpy
# use ismodule()
print(inspect.ismodule(numpy))
Python3
# import required modules
import inspect
# explicit function
def fun(a):
return 2*a
# use isfunction()
print(inspect.isfunction(fun))
Python3
# import required modules
import inspect
import collections
# use ismethod()
print(inspect.ismethod(collections.Counter))
Python3
# import required module
import inspect
# create classes
class A(object):
pass
class B(A):
pass
class C(B):
pass
# not nested
print(inspect.getmro(C))
Python3
# import required module
import inspect
# create classes
class A(object):
pass
class B(A):
pass
class C(B):
pass
# nested list of tuples
for i in (inspect.getclasstree(inspect.getmro(C))):
print(i)
Python3
# import required module
import inspect
import math
# shows the member functions
# of any module or object
print(inspect.getmembers(math))
Python3
# import required modules
import inspect
import collections
# use signature()
print(inspect.signature(collections.Counter))
Python3
# import required module
import inspect
# define explicit function
def Fibonacci(n):
if n < 0:
return 0
elif n == 0:
return 0
elif n == 1:
return 1
else:
return Fibonacci(n-1)+Fibonacci(n-2)
# Driver Program
(Fibonacci(12))
# inpsecting interpreter stack
print(inspect.stack())
Python3
# import required modules
import inspect
def fun(a,b):
# product of
# two numbers
return a*b
# use getsource()
print(inspect.getsource(fun))
Python3
# import required modules
import inspect
import collections
# use getmodule()
print(inspect.getmodule(collections))
Python3
# import required modules
import inspect
from tkinter import *
# create object
root = Tk()
# use getdoc()
print(inspect.getdoc(root))
输出:
True
- ismodule():如果给定的参数是导入的模块,则返回true 。
例子:
蟒蛇3
# import required modules
import inspect
import numpy
# use ismodule()
print(inspect.ismodule(numpy))
输出:
True
- isfunction():如果给定的参数是内置函数名称,则此方法返回true 。
例子:
蟒蛇3
# import required modules
import inspect
# explicit function
def fun(a):
return 2*a
# use isfunction()
print(inspect.isfunction(fun))
输出:
True
- ismethod():该方法用于检查传递的参数是否为方法名。
例子:
蟒蛇3
# import required modules
import inspect
import collections
# use ismethod()
print(inspect.ismethod(collections.Counter))
输出:
False
检索令牌来源的方法:
- getclasstree() : getclasstree()方法将有助于获取和检查类层次结构。它返回该类及其前面基类的元组。那结合 getmro() 返回基类的方法有助于理解类层次结构。
示例 1:
蟒蛇3
# import required module
import inspect
# create classes
class A(object):
pass
class B(A):
pass
class C(B):
pass
# not nested
print(inspect.getmro(C))
输出:
(
示例 2:
蟒蛇3
# import required module
import inspect
# create classes
class A(object):
pass
class B(A):
pass
class C(B):
pass
# nested list of tuples
for i in (inspect.getclasstree(inspect.getmro(C))):
print(i)
输出:
(
- getmembers():此方法返回作为此方法的参数传递的模块中存在的成员函数。
例子:
蟒蛇3
# import required module
import inspect
import math
# shows the member functions
# of any module or object
print(inspect.getmembers(math))
输出:
[(‘__doc__’, ‘This module provides access to the mathematical functions\ndefined by the C standard.’), (‘__loader__’,
- signature(): signature()方法帮助用户理解将传递给函数的属性。
蟒蛇3
# import required modules
import inspect
import collections
# use signature()
print(inspect.signature(collections.Counter))
输出:
(*args, **kwds)
- stack():此方法有助于检查解释器堆栈或调用函数的顺序。
蟒蛇3
# import required module
import inspect
# define explicit function
def Fibonacci(n):
if n < 0:
return 0
elif n == 0:
return 0
elif n == 1:
return 1
else:
return Fibonacci(n-1)+Fibonacci(n-2)
# Driver Program
(Fibonacci(12))
# inpsecting interpreter stack
print(inspect.stack())
输出:
[FrameInfo(frame=’, line 22, code
- getsource():此方法返回模块、类、方法或作为getsource()方法参数传递的函数的源代码。
例子:
蟒蛇3
# import required modules
import inspect
def fun(a,b):
# product of
# two numbers
return a*b
# use getsource()
print(inspect.getsource(fun))
输出:
def fun(a,b):
# product of
# two numbers
return a*b
- getmodule():这个方法 返回特定对象的模块名称作为此方法中的参数。
蟒蛇3
# import required modules
import inspect
import collections
# use getmodule()
print(inspect.getmodule(collections))
输出:
- getdoc(): getdoc() 方法 将此方法中参数的文档作为字符串返回。
例子:
蟒蛇3
# import required modules
import inspect
from tkinter import *
# create object
root = Tk()
# use getdoc()
print(inspect.getdoc(root))
输出:
Toplevel widget of Tk which represents mostly the main window
of an application. It has an associated Tcl interpreter.