娛樂城

【線上投注】威力彩 獎金DeBug Python代碼端賴print函數?換用這個一天2K+Star的對象吧

 DeBug Python代碼全靠print函數?換用這個一天2K+Star的工具吧

print 函數已經老,DeBug 該靠 PySnooper 了~

小火伴們,你們都奈何 DeBug Python 代碼?是否是經常使用 print 大法?在本文先容的這個項目中,deBug Python 代碼不再必要 print 了。只需給有疑難的代碼加上裝飾器,種種信息高深莫測,找失足誤也就特別很是簡略了。

這個名為 PySnooper 的項目是剛開源的,僅僅一天就取得了 2K+ 的 Star 量,當然這「一天」還沒收場,這個珍藏量也會持續革新。

DeBug Python代碼全靠print函數?換用這個一天2K+Star的工具吧

項目地址:https://github.com/cool-RR/pysnooper

Python 奈何 DeBug?

若是寫著寫著模子,發明模子不 work 了,那末你該奈何找出 Python 的過錯語句?這類過錯一般與語法有關,而是某個變量的運算產生了過錯。接上去咱們就要逐步找哪一個處所有成績了,這里最多見、最直觀的要領便是 print 大法。把咱們嫌疑的變量打印進去,總會找到異樣之處。

若是代碼中嵌入了單位測試,例如 assert 語句,那末還能放大一些嫌疑規模。但平日咱們都要多次測驗考試,打印多個變量才能找到過錯之處。在 PyTorch 或者 Keras 如許的靜態計算圖還好,打印進去的間接是一個值,像 TensorFlow 如許的動態計算圖,打印進去是張量信息而不是值,這就很尷尬了。

現實上不止是機械進修,在咱們寫 Python 的時辰,老是想弄清晰為何寫的代碼在運轉時有點不大對。許多讀者樂于使用斷點等成熟的 DeBug 對象,也有的間接使用 print 大法找過錯之處。但目前咱們不必要憂慮了,本文將先容一個新的開源對象剛塞,它決心信念滿滿地號令到:「不要再使用 print 函數來 DeBug 啦~」

極簡DeBug對象PySnooper

一般環境下,想要曉得哪一行代碼在運轉、ptt 蔡英文哪一行不運轉、內地變量的值是若干時,大部門人會使用 print 函數,在樞紐部門打印某個或者某組變量的值、外形、類型等信息。

而 PySnooper 讓你能疾速地取得這些信息,且相比之下它不必要過細地寫 print 函數,只要要向感愛好的函數增長一個裝飾器就行了。咱們會失去該函數的具體 log,包括哪行代碼能運轉、甚么時辰運轉和內地變質變化切實其實切時間。

相比于其余代碼智能對象,PySnooper 為什么云云良好?由于不必要任何配置,你就可以在下等、不規定的企業代碼庫上使用 PySnooper。只要要加個裝飾器,并為日記輸入地址指定路徑就行了。

如許說可能不太直觀,上面咱們可以詳細望個案例,PySnooper 的良好就能高深莫測。

PySnooper 案例

上面項目作者寫了一個函數以將數值轉換為二進制碼,該函數返歸的是一個二進制列表。上面咱們將裝飾器 @pysnooper.snoop() 加到該函數上,就大功樂成了。

  1. import pysnooper  
  2. @pysnooper.snoop()  
  3. def number_to_bits(number):  
  4.  if number:  
  5.  bits = []  
  6.  while number:  
  7.  number, remainder = divmod(number, 2)  
  8.  bits.insert(0, remainder)  
  9.  return bits  
  10.  else:  
  11.  return [0]  
  12. number_to_bits(6)  

澳網

該函數返歸的日記以下,咱們可以望到在挪用 number_to_bits 函數時,給予參數 number 的初始值為 6。然后,PySnooper 就仍是對著源代碼一行行闡發了。

如上闡發所示,函數每創立一個新變量,那末這個變量的值、這個變量的轉變都邑鋪示進去。并且 PySnooper 還將輪回睜開,是以轉變的細節加倍明確。終極 6 的二進制版本應當是 [1, 1, 0],它的轉變進程也鋪示在 bits 變量中。

目前經由過程這些具體信息,PySnooper 不再用憂慮咱們用 print 函數強行 deBug 了。

PySnooper 具體特性

若是規范過錯輸入難以nba 即時比分取得,或者者太長了,那末可以將輸入定位到內地文件:

  1. @pysnooper.snoop('/my/log/file.log') 

查望一些非內地變量的值:

  1. @pysnooper.snoop(variables=('foo.bar', 'self.whatever')) 

鋪示咱們函數中挪用函數的 snoop 行:

  1. @pysnooper.snoop(depth=2) 

將一切 snoop 行以某個前綴最先,更易定位以及找到:

  1. @pysnooper.snoop(prefix='ZZZ ') 

演示 PySnooper

上面咱們最最先測驗考試使用 PySnooper 獵取 TensorFlow 的信息,若是它能獵取種種張量信息,那可就太強盛了。

起首使用 pip 裝置包:

  1. pip install pysnooper 

公然,TensorFlow 這類動態圖并不克不及很好地獵取信息,讀者也可測驗考試一下。前面咱們試了試 NumPy,但愿能獵取整個計算流的信息。以下代碼所示,咱們創立了兩個數組變量,而且 2×2 的矩陣會連乘多次,若是能追蹤到這類連乘,那就比較利益理過錯。

  1. import pysnooper 
  2. import numpy as np 
  3. @pysnooper.snoop() 
  4. def multi_matmul(times): 
  5.  x = np.random.rand(2, 2) 
  6.  w = np.random.rand(2, 2) 
  7.  for i in range(times): 
  8.  x = np.matmul(x, w) 
  9.  return x 
  10. multi_matmul(3) 

關于 NumPy,該對象確鑿能追蹤一切可疑變量的轉變進程。當然在現實運算中,矩陣乘法的維度會特別很是大,咱們可以間接追蹤外形(Shape),而不是詳細的值。

【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。

中華隊 ptt