最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python調(diào)試神器PySnooper的使用

 更新時間:2019年07月03日 10:22:55   作者:吃魚益智  
這篇文章主要介紹了python調(diào)試神器PySnooper的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

相信很多小伙伴平時寫python的時候都是需要調(diào)試程序的,出問題了,需要了解函數(shù)內(nèi)部是怎么跑的,而這個時候很多人都會想到在疑惑的地方使用print函數(shù)來打印一下參數(shù)來調(diào)試。雖然用print也是不失為是一種方法,但是有時如果疑惑的地方多就要每個地方都要加print,這樣就顯得比較麻煩了。

今天發(fā)現(xiàn)在Github開源了一個神器,可以清楚讓你清楚了解函數(shù)內(nèi)部的運行以及參數(shù)值的變化,PySnooper,項目地址:https://github.com/cool-RR/PySnooper

使用簡單,強大,誰用誰知道它的好!下面簡單說一下PySnooper的用法:

這個工具使用起來很簡單,首先直接可以使用 pip 安裝:pip install pysnooper使用時,只需要在每個函數(shù)前面添加裝飾器即可。
給個簡單例子看看就知道了,

import pysnooper
@pysnooper.snoop()
def removeDuplicates(nums):
  """
  :type nums: List[int]
  :rtype: int
  """
  flag = 0
  i=1
  while i<len(nums):
    if nums[i]==nums[i-1]:
      flag+=1
      i+=1
      if flag>=2:
        del nums[i-1]
        i-=1
    else:
      i+=1
      flag=0
  return len(nums)

nums = [1,1,1,2]
print(removeDuplicates(nums))

添加裝飾器后,運行代碼就會輸出對應(yīng)函數(shù)的執(zhí)行數(shù)據(jù)

Starting var:.. nums = [1, 1, 1, 2]
13:03:44.990194 call        11 def removeDuplicates(nums):
13:03:44.990695 line        16     flag = 0
New var:....... flag = 0
13:03:44.990695 line        17     i=1
New var:....... i = 1
13:03:44.990695 line        18     while i<len(nums):
13:03:44.990695 line        19         if nums[i]==nums[i-1]:
13:03:44.990695 line        20             flag+=1
Modified var:.. flag = 1
13:03:44.990695 line        21             i+=1
Modified var:.. i = 2
13:03:44.991193 line        22             if flag>=2:
13:03:44.991193 line        18     while i<len(nums):
13:03:44.991193 line        19         if nums[i]==nums[i-1]:
13:03:44.991193 line        20             flag+=1
Modified var:.. flag = 2
13:03:44.991193 line        21             i+=1
Modified var:.. i = 3
13:03:44.991193 line        22             if flag>=2:
13:03:44.991193 line        23                 del nums[i-1]
Modified var:.. nums = [1, 1, 2]
13:03:44.991193 line        24                 i-=1
Modified var:.. i = 2
13:03:44.991193 line        18     while i<len(nums):
13:03:44.991193 line        19         if nums[i]==nums[i-1]:
13:03:44.991193 line        26             i+=1
Modified var:.. i = 3
13:03:44.991693 line        27             flag=0
Modified var:.. flag = 0
13:03:44.991693 line        18     while i<len(nums):
13:03:44.991693 line        28     return len(nums)
13:03:44.991693 return      28     return len(nums)
Return value:.. 3

當(dāng)然如果嫌棄這個直接輸出內(nèi)容還想保存日志記錄的話,這個裝飾器還幾個可選參數(shù),例如:

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

先創(chuàng)建好log目錄,然后將日志輸出到file文件中。

@pysnooper.snoop(prefix='removeDuplicates: ')

給調(diào)試的行加個前綴名便于辨識和定位,這個參數(shù)適用于如果同時調(diào)試多個函數(shù)使用,我這里的例子是使用了函數(shù)名稱來作為前綴名,摘抄一點日志記錄如下:

removeDuplicates: Starting var:.. nums = [1, 1, 1, 2]
removeDuplicates: 13:53:14.322036 call    11 def removeDuplicates(nums):
removeDuplicates: 13:53:14.323037 line    16   flag = 0
@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))

查看非本地變量

@pysnooper.snoop(depth=2)

顯示函數(shù)中調(diào)用函數(shù)的snoop行,depth參數(shù)的取值范圍是大于或等于1的正整數(shù),在源碼里有這樣一個判斷:assert self.depth >= 1,當(dāng)取小于1的值就會拋異常

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實現(xiàn)分段讀取和保存遙感數(shù)據(jù)

    Python實現(xiàn)分段讀取和保存遙感數(shù)據(jù)

    當(dāng)遇到批量讀取大量遙感數(shù)據(jù)進行運算的時候,如果不進行分段讀取操作的話,電腦內(nèi)存可能面臨著不夠使用的情況,所以我們要進行分段讀取數(shù)據(jù)然后進行運算,運算結(jié)束之后把這段數(shù)據(jù)保存成tif文件,本文介紹了Python實現(xiàn)分段讀取和保存遙感數(shù)據(jù),需要的朋友可以參考下
    2023-08-08
  • Pycharm創(chuàng)建文件時自動生成文件頭注釋(自定義設(shè)置作者日期)

    Pycharm創(chuàng)建文件時自動生成文件頭注釋(自定義設(shè)置作者日期)

    這篇文章主要介紹了Pycharm創(chuàng)建文件時自動生成文件頭注釋(自定義設(shè)置作者日期),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • pandas之query方法和sample隨機抽樣操作

    pandas之query方法和sample隨機抽樣操作

    這篇文章主要介紹了pandas之query方法和sample隨機抽樣操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python中使用websocket方法實例詳解

    python中使用websocket方法實例詳解

    WebSocket是一種網(wǎng)絡(luò)通信協(xié)議,它在單個TCP連接上提供全雙工的通信信道,本文我們將探討如何在Python中使用WebSocket實現(xiàn)實時通信,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 解析Python中的二進制位運算符

    解析Python中的二進制位運算符

    這篇文章主要介紹了解析Python中的二進制位運算符,是Python學(xué)習(xí)中的基本知識,需要的朋友可以參考下
    2015-05-05
  • python報錯TypeError: Input z must be 2D, not 3D的解決方法

    python報錯TypeError: Input z must be 

    大家好,本篇文章主要講的是python報錯TypeError: Input z must be 2D, not 3D的解決方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12
  • 利用Python實現(xiàn)網(wǎng)絡(luò)測試的示例代碼

    利用Python實現(xiàn)網(wǎng)絡(luò)測試的示例代碼

    Speedtest CLI 為命令行帶來 Speedtest 背后的可信技術(shù)和全球服務(wù)器網(wǎng)絡(luò)。本文將利用它進行網(wǎng)絡(luò)測試,感興趣的小伙伴可以了解一下
    2022-04-04
  • Pytest自定義mark標(biāo)記篩選用例

    Pytest自定義mark標(biāo)記篩選用例

    這篇文章介紹了Pytest自定義mark標(biāo)記篩選用例的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • python中的Json模塊dumps、dump、loads、load函數(shù)用法詳解

    python中的Json模塊dumps、dump、loads、load函數(shù)用法詳解

    這篇文章主要介紹了python中的Json模塊dumps、dump、loads、load函數(shù)用法講解,本文逐一介紹結(jié)合實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2022-11-11
  • django 自定義用戶user模型的三種方法

    django 自定義用戶user模型的三種方法

    這篇文章主要介紹了django 自定義用戶user模型的三種方法,需要的朋友可以參考下
    2014-11-11

最新評論

蕲春县| 宽甸| 铁力市| 临海市| 红安县| 长寿区| 含山县| 精河县| 宁陵县| 新竹市| 昌邑市| 丰都县| 措勤县| 耿马| 福清市| 荔浦县| 元谋县| 岑巩县| 顺平县| 米脂县| 重庆市| 磴口县| 穆棱市| 西林县| 美姑县| 叙永县| 青岛市| 门头沟区| 黎城县| 金堂县| 大安市| 金沙县| 大石桥市| 西贡区| 汝州市| 灵石县| 建始县| 巴马| 绍兴市| 沅陵县| 新营市|