欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

使用簡(jiǎn)單,強(qiáng)大,誰用誰知道它的好!下面簡(jiǎn)單說一下PySnooper的用法:

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

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ùn)行代碼就會(huì)輸出對(duì)應(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)然如果嫌棄這個(gè)直接輸出內(nèi)容還想保存日志記錄的話,這個(gè)裝飾器還幾個(gè)可選參數(shù),例如:

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

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

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

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

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ù),在源碼里有這樣一個(gè)判斷:assert self.depth >= 1,當(dāng)取小于1的值就會(huì)拋異常

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

相關(guān)文章

最新評(píng)論