inspect模塊是針對模塊,類,方法,功能等對象提供些有用的方法。例如能夠幫助咱們檢查類的內容,檢查方法的代碼,提取和格式化方法的參數等。python
import inspect import os class Test(object): """Test Class """ def test(self): self.fuc = lambda x: x class Testone(Test): pass print(inspect.ismodule(os)) # True print(inspect.isclass(Test)) # True print(inspect.getdoc(Test)) # Test Class print(inspect.getsourcefile(Test)) # 文件路徑 print(inspect.getsourcelines(Test)) # 代碼塊,每行一個元素,組成數組 print(inspect.getsource(Test)) # 獲取代碼塊本來內容,帶縮進
#打印全局變量中的模塊對象 myglobals = {} myglobals.update(globals()) modules = [value for key, value in myglobals.items() if inspect.ismodule(value)] print(modules) 輸出結果: [<module 'builtins' (built-in)>, <module 'inspect' from 'D:\\python\\python\\lib\\inspect.py'>, <module 'os' from 'D:\\python\\python\\lib\\os.py'>]
# 查看類的可調用方法 for name, value in inspect.getmembers(Test, callable): print(" Callable:", name) for name, value in inspect.getmembers(Test(), callable): print(" Instance Callable:", name)
def debug(): import inspect print(inspect.stack()[0][3]) print(inspect.stack()[1][3]) caller_name = inspect.stack()[1][3] # print("[DEBUG]: enter {}()".format(caller_name) ) def say_hello(): debug() # print("hello!") def say_goodbye(): debug() # print("goodbye!") if __name__ == '__main__': say_hello() say_goodbye() 運行結果: debug say_hello debug say_goodbye
inspect.ismodule(object): 是否爲模塊express
inspect.isclass(object):是否爲類數組
inspect.ismethod(object):是否爲方法(bound method written in python)函數
inspect.isfunction(object):是否爲函數(python function, including lambda expression)ui
inspect.isgeneratorfunction(object):是否爲python生成器函數spa
inspect.isgenerator(object):是否爲生成器debug
inspect.istraceback(object): 是否爲tracebackcode
inspect.isframe(object):是否爲frameorm
inspect.iscode(object):是否爲code對象
inspect.isbuiltin(object):是否爲built-in函數或built-in方法
inspect.isroutine(object):是否爲用戶自定義或者built-in函數或方法
inspect.isabstract(object):是否爲抽象基類
inspect.ismethoddescriptor(object):是否爲方法標識符
inspect.isdatadescriptor(object):是否爲數字標識符,數字標識符有__get__ 和__set__屬性; 一般也有__name__和__doc__屬性
inspect.isgetsetdescriptor(object):是否爲getset descriptor
inspect.ismemberdescriptor(object):是否爲member descriptor