<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          推薦一個Python debug神器:PySnooper

          共 1386字,需瀏覽 3分鐘

           ·

          2022-07-05 16:50

          debug是碼農們的基本技能,每個人都有自己擅長(習慣)的debug手段,比如蝦神年輕的時候,曾經在ms-dos平臺上寫過幾行C語言代碼,那個時代,IDE是這個樣子的:


          后來還用過幾天Turbo C,是這個樣子的:

          在這種IDE下面,debug是一種極度痛苦的事情,所以就養(yǎng)成了print調試的習慣:所有的編程語言debug手段,都基于這兩種:
          1、打印關鍵變量跟蹤調試。
          2、打斷點步進調試。

          比如蝦神才畢業(yè)的時候,還寫過幾天javascript,那個時代沒有專用的IDE,也沒有專用的JS調試工具,所以調試的時候,滿頁面寫滿alert……
          (我一直覺得這個提示充滿了濃濃的惡意……)

          后來,到了寫Python的時候,各種IDE已經很成熟了,但是一直養(yǎng)成習慣,老讓我不自覺的時候在debug的時候,寫滿了print,然后打包發(fā)布的時候,清理代碼搞得焦頭爛額。

          一般來說,調試還是通過IDE進行斷點步進,效率是最高的,效果也是最好,但是,很多時候,print有著不可替代的作用,比如遠程在linux上用過shell調試Python腳本的時候;又如在jupyter notebook需要進行調試的時候;再如用Pandas的apply函數的時候;斷點都不用好,更不用說,多線程編程的時候,斷點調試基本上就是被廢掉了。

          直到我后面發(fā)現了一個Python的debug神包:pysnooper

          可能老Python碼農們早就用上這個工具包,不過鑒于蝦神的讀者,還是以GIS圈子的同學比較多,所以覺得還有必要給大家推介一下這個神奇的debug工具。

          如下所示:
          安裝,非常簡單,直接pip。

          使用,就更簡單了,導入,然后寫一個裝飾器(不知道啥是裝飾器的同學,去參考其他文章,如果懶得去了解,就硬記下來這樣用就行):


          方法很簡單,求素數(啥叫素數,自己去放小學數學)。

          (PS:素數是數論里面一個很有意思的問題,它在逐步計算到它自身之前,都無法判斷,只能逐步迭代,沒有快速判定,用數學家的說法:素數隨機的出現在數軸上,無法預先判定,素數號稱數論的皇冠,各種數學大佬們們都對它進行了研究,恐怖如斯……)

          當我們運行的時候,會出現這樣的debug內容:

          從100計算到200,第一輪循環(huán)的時候,i = 100,當 j = 2的時候,flag就已經等于false,跳出循環(huán)。
          然后第二輪循環(huán),i = 101,j =2開始,一直到sqrt(101)+1,也就是2-11,迭代之后,發(fā)現都沒有因子,所以得到101是素數,加入到p這個List中:


          從以上debug輸出結果可以看出,PySnooper輸出信息主要包括以下幾個部分:
          • 局部變量值

          • 代碼片段

          • 局部變量所在行號

          • 返回結果


          也就是說,把我們日常DEBUG所需要的主要信息都輸出出來了。而且還有運行的時間,這樣還可以用來調試代碼效率。
          當然,你也可以選擇輸出成日志,這樣還可以后續(xù)分析,比如:


          可以得到這樣一個log文件:


          當然,為了區(qū)別多個function,也可以加前綴:

          結果如下:


          當然,還有一系列參數可用,大家可以自行探索:


          打完收工。

          加入知識星球【我們談論數據科學】

          500+小伙伴一起學習!








          · 推薦閱讀 ·

          geopandas輕松繪制交互式在線地圖

          地圖可視化:geopandas繪制拓撲著色地圖

          新一代Python包管理工具來了



          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品一线在线观看 | 国产xxxx视频 | 青娱乐草草 | 亚洲日本韩国一区二区在线 | 抽插美女大逼网页 |