Python??inspect?模塊的簡單使用及常用方法
Python中的inspect模塊解析
Python的inspect模塊是一個強(qiáng)大的內(nèi)省工具,允許開發(fā)者檢查(inspect)活動對象和源代碼。它提供了一系列函數(shù),用于獲取信息關(guān)于正在運行的程序和調(diào)用堆棧,非常適合進(jìn)行調(diào)試和動態(tài)分析。本文將通過介紹inspect模塊的關(guān)鍵功能,并結(jié)合實際案例代碼,來探索其在日常開發(fā)中的應(yīng)用。
常用方法
1. 獲取當(dāng)前執(zhí)行的函數(shù)或方法名、文件路徑【并不是調(diào)用方】
在日志記錄或調(diào)試時,知道當(dāng)前執(zhí)行的函數(shù)名是非常有用的
import inspect
def who_am_i():
# 輸出當(dāng)前文件絕對路徑
print(inspect.currentframe().f_code.co_filename)
return inspect.currentframe().f_code.co_name
print(who_am_i()) # 輸出: who_am_i個人認(rèn)為比較有用的就是 co_filename、co_name
2. 獲取調(diào)用者信息
獲取當(dāng)前函數(shù)或方法的調(diào)用者信息
import inspect
def caller_info():
frame = inspect.currentframe().f_back
print(f調(diào)用者 {frame.f_code.co_filename} 調(diào)用行號 d{frame.f_lineno}")
def test():
caller_info() # 調(diào)用以獲取調(diào)用者信息
test()這個例子顯示了如何獲取調(diào)用當(dāng)前函數(shù)的代碼位置,非常有助于調(diào)試復(fù)雜的調(diào)用鏈
3. 查看函數(shù)參數(shù)
inspect模塊可以用來檢查函數(shù)或方法的參數(shù),這對于動態(tài)分析和生成文檔非常有用
import inspect
def sample_function(name, age=25):
pass
sig = inspect.signature(sample_function)
print(sig) # 輸出: (name, age=25)4. 獲取源代碼
inspect還可以用來獲取函數(shù)、類或模塊的源代碼
import inspect
def my_function():
"""A simple function."""
pass
print(inspect.getsource(my_function))5. 檢查類和實例
inspect模塊提供了多種方式來檢查類和實例,比如獲取類的所有方法、屬性等
class MyClass:
def method_one(self):
pass
def method_two(self):
pass
# 獲取類的所有成員方法
methods = inspect.getmembers(MyClass, predicate=inspect.isfunction)
print(methods) # 輸出 MyClass 中定義的方法實際案例:自動化場景下的應(yīng)用
一個常見的使用場景是動態(tài)地調(diào)用函數(shù)或方法,并基于它們的簽名自動生成文檔。
def test():
# 獲取調(diào)用方
frame = inspect.currentframe().f_back
# 獲取調(diào)用方文件絕對路徑
caller_file = inspect.getfile(frame)
# 這種方式也可以
caller_file = frame.f_code.co_filename
...
params = [
caller_file,
"--env-data",
env_data.json(),
f"--count={count}",
"-m",
mark,
]一個基于 Pytest 自動化測試項目
- 每個 py 模塊都會調(diào)用這個方法來執(zhí)行 Pytest 命令來跑測試用例
- 那怎么才能準(zhǔn)確知道要跑哪個文件呢?
- 通過第一、二行代碼即可
到此這篇關(guān)于Python - inspect 模塊的簡單使用的文章就介紹到這了,更多相關(guān)Python inspect 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python之pyinstaller組件打包命令和異常解析實戰(zhàn)
前段時間在制作小工具的時候,直接在命令行用pyinstaller工具打包成功后,啟動exe可執(zhí)行文件的時候各種報錯, 今天,我們就分享一下踩坑經(jīng)過,需要的朋友可以參考下2021-09-09
Python?實現(xiàn)驅(qū)動AI機(jī)器人
這篇文章主要介紹了Python?實現(xiàn)驅(qū)動AI機(jī)器人,下文圍繞利用Python?實現(xiàn)驅(qū)動AI機(jī)器人的相關(guān)資料展開內(nèi)容,需要的小伙伴可以參考一下2022-02-02
Python寫的一個定時重跑獲取數(shù)據(jù)庫數(shù)據(jù)
本文給大家分享基于python寫的一個定時重跑獲取數(shù)據(jù)庫數(shù)據(jù)的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下2016-12-12
Python機(jī)器學(xué)習(xí)之KNN近鄰算法
KNN可以說是最簡單的分類算法之一,同時,它也是最常用的分類算法,文中非常詳細(xì)的介紹了該算法,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
Django框架教程之正則表達(dá)式URL誤區(qū)詳解
正則表達(dá)式對大家來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Django框架教程之正則表達(dá)式URL誤區(qū)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
Python2與Python3的區(qū)別實例總結(jié)
這篇文章主要介紹了Python2與Python3的區(qū)別,結(jié)合實例形式總結(jié)分析了Python2與Python3打印輸出、編碼、數(shù)值運算、異常處理等使用區(qū)別,需要的朋友可以參考下2019-04-04
Python實現(xiàn)softmax反向傳播的示例代碼
這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)softmax反向傳播的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的可以了解一下2023-04-04
Django-xadmin+rule對象級權(quán)限的實現(xiàn)方式
今天小編就為大家分享一篇Django-xadmin+rule對象級權(quán)限的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

