📜  在Python中检查模块

📅  最后修改于: 2022-05-13 01:55:51.105000             🧑  作者: Mango

在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))

输出:

  • 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())

输出:

  • 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))

输出: