日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用這個開源工具來監(jiān)控Python中的變量

Watchpoints 是一個簡單但功能強大的工具,可以幫助你在調(diào)試 Python 時監(jiān)控變量。

成都創(chuàng)新互聯(lián)公司服務(wù)項目包括唐縣網(wǎng)站建設(shè)、唐縣網(wǎng)站制作、唐縣網(wǎng)頁制作以及唐縣網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,唐縣網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到唐縣省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

在調(diào)試代碼時,你經(jīng)常面臨著要弄清楚一個變量何時發(fā)生變化。如果沒有任何高級工具,那么可以選擇使用打印語句在期望它們更改時輸出變量。然而,這是一種非常低效的方法,因為變量可能在很多地方發(fā)生變化,并且不斷地將其打印到終端上會產(chǎn)生很大的干擾,而將它們打印到日志文件中則變得很麻煩。

這是一個常見的問題,但現(xiàn)在有一個簡單而強大的工具可以幫助你監(jiān)控變量:watchpoints。

“監(jiān)視點”的概念在 C 和 C++ 調(diào)試器中很常見,用于監(jiān)控內(nèi)存,但在 Python 中缺乏相應(yīng)的工具。watchpoints 填補了這個空白。

安裝

要使用它,你必須先用 pip 安裝它:

 
 
 
  1. $ python3 -m pip install watchpoints

在Python中使用 watchpoints

對于任何一個你想監(jiān)控的變量,使用 watch 函數(shù)對其進(jìn)行監(jiān)控。

 
 
 
  1. from watchpoints import watch
  2.  
  3. a = 0
  4. watch(a)
  5. a = 1

當(dāng)變量發(fā)生變化時,它的值就會被打印到標(biāo)準(zhǔn)輸出

 
 
 
  1. ====== Watchpoints Triggered ======
  2.  
  3. Call Stack (most recent call last):
  4. (my_script.py:5):
  5. > a = 1
  6. a:
  7. 0
  8. ->
  9. 1

信息包括:

  • 變量被改變的行。
  • 調(diào)用棧。
  • 變量的先前值/當(dāng)前值。

它不僅適用于變量本身,也適用于對象的變化:

 
 
 
  1. from watchpoints import watch
  2.  
  3. a = []
  4. watch(a)
  5. a = {} # 觸發(fā)
  6. a["a"] = 2 # 觸發(fā)

當(dāng)變量 a 被重新分配時,回調(diào)會被觸發(fā),同時當(dāng)分配給 a 的對象發(fā)生變化時也會被觸發(fā)。

更有趣的是,監(jiān)控不受作用域的限制。你可以在任何地方觀察變量/對象,而且無論程序在執(zhí)行什么函數(shù),回調(diào)都會被觸發(fā)。

 
 
 
  1. from watchpoints import watch
  2.  
  3. def func(var):
  4.     var["a"] = 1
  5.  
  6. a = {}
  7. watch(a)
  8. func(a)

例如,這段代碼打印出:

 
 
 
  1. ====== Watchpoints Triggered ======
  2.  
  3. Call Stack (most recent call last):
  4.  
  5. (my_script.py:8):
  6. > func(a)
  7. func (my_script.py:4):
  8. > var["a"] = 1
  9. a:
  10. {}
  11. ->
  12. {'a': 1}

watch 函數(shù)不僅可以監(jiān)視一個變量,它也可以監(jiān)視一個字典或列表的屬性和元素。

 
 
 
  1. from watchpoints import watch
  2.  
  3. class MyObj:
  4.     def __init__(self):
  5.         self.a = 0
  6.  
  7. obj = MyObj()
  8. d = {"a": 0}
  9. watch(obj.a, d["a"]) # 是的,你可以這樣做
  10. obj.a = 1 # 觸發(fā)
  11. d["a"] = 1 # 觸發(fā)

這可以幫助你縮小到一些你感興趣的特定對象。

如果你對輸出格式不滿意,你可以自定義它。只需定義你自己的回調(diào)函數(shù):

 
 
 
  1. watch(a, callback=my_callback)
  2.  
  3. # 或者全局設(shè)置
  4.  
  5. watch.config(callback=my_callback)

當(dāng)觸發(fā)時,你甚至可以使用 pdb

 
 
 
  1. watch.config(pdb=True)

這與 breakpoint() 的行為類似,會給你帶來類似調(diào)試器的體驗。

如果你不想在每個文件中都導(dǎo)入這個函數(shù),你可以通過 install 函數(shù)使其成為全局:

 
 
 
  1. watch.install() # 或 watch.install("func_name") ,然后以 func_name() 方式使用

我個人認(rèn)為,watchpoints 最酷的地方就是使用直觀。你對一些數(shù)據(jù)感興趣嗎?只要“觀察”它,你就會知道你的變量何時發(fā)生變化。

嘗試 watchpoints

我在 GitHub 上開發(fā)維護(hù)了 watchpoints,并在 Apache 2.0 許可下發(fā)布了它。安裝并使用它,當(dāng)然也歡迎大家做出貢獻(xiàn)。


本文標(biāo)題:使用這個開源工具來監(jiān)控Python中的變量
網(wǎng)頁路徑:http://m.5511xx.com/article/cochggo.html