使用Icecream提高Python調(diào)試效率
點(diǎn)擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
動(dòng)機(jī)
使用print來(lái)調(diào)試代碼,你會(huì)發(fā)現(xiàn)查看終端上的許多行輸出,然后試圖找出每個(gè)輸出屬于哪些代碼,這是一個(gè)非常繁瑣的過(guò)程。
例如運(yùn)行下面的程序
num1 = 30num2 = 40print(num1)print(num2)
輸出結(jié)果如下
3040
這些輸出中哪一個(gè)是num1?這些輸出中哪一個(gè)是num2?兩個(gè)輸出可能不是那么糟糕,但是如果有超過(guò)5個(gè)不同的輸出呢?試圖找到負(fù)責(zé)輸出的源代碼可能會(huì)非常耗時(shí)。
當(dāng)然,可以嘗試在print語(yǔ)句中添加文本來(lái)進(jìn)行標(biāo)記,以便更容易地理解:
num1 = 30num2 = 40print('num1', num1)print('num2', num2)
num1 30num2 40
但同樣,輸出文本也會(huì)非常耗時(shí)。是否有一種方法可以打印負(fù)責(zé)輸出的代碼,而不需要輸出額外的文本呢?
這就是冰淇淋派上用場(chǎng)的時(shí)候了!
num1 = 30num2 = 40ic(num1)ic(num2)
ic| num1: 30ic| num2: 40
什么是冰淇淋?
Icecream是一個(gè)Python庫(kù),可通過(guò)最少的代碼使打印調(diào)試更具可讀性。
使用下面的代碼安裝冰淇淋
pip install icecream讓我們通過(guò)打印Python函數(shù)的輸出來(lái)進(jìn)行嘗試。
from icecream import icdef plus_five(num):return num + 5ic(plus_five(4))ic(plus_five(5))

通過(guò)使用ic,我們不僅可以看到輸出,還可以看到函數(shù)及其參數(shù)!多么方便!終端中的顏色也將與上面顯示的輸出一樣多彩。
檢查執(zhí)行情況
要查找代碼執(zhí)行的位置,可以執(zhí)行下面所示的操作,以查找執(zhí)行的語(yǔ)句。
def hello(user:bool):if user:print("I'm user")else:print("I'm not user")hello(user=True)
I'm user通過(guò)運(yùn)行ic()而不需要額外的文本,Icecream可以讓您更容易地完成上面的工作。
from icecream import icdef hello(user:bool):if user:ic()else:ic()hello(user=True)

現(xiàn)在就可以知道函數(shù)hello中的第5行的代碼已執(zhí)行,而第7行的代碼未執(zhí)行。
自定義前綴
如果想要插入一個(gè)自定義前綴,例如對(duì)print語(yǔ)句執(zhí)行代碼的時(shí)間,那么icecream也允許這樣做。
from datetime import datetimefrom icecream import icimport timefrom datetime import datetimedef time_format():return f'{datetime.now()}|> 'ic.configureOutput(prefix=time_format)for _ in range(3):time.sleep(1)ic('Hello')

現(xiàn)在代碼執(zhí)行的時(shí)間會(huì)自動(dòng)顯示在輸出中!是不是超酷的!
獲得更多的上下文信息
除了了解負(fù)責(zé)輸出的代碼之外,你可能還想知道代碼執(zhí)行的行和文件來(lái)自哪個(gè)行。要了解代碼的上下文,只需要將includeecontext = True添加到ic.configureOutput ()中即可。
from icecream import icdef plus_five(num):return num + 5ic.configureOutput(includeContext=True)ic(plus_five(4))ic(plus_five(5))

現(xiàn)在就可以知道第一個(gè)輸出是由icecream_example.py文件中的第7行的plus_five函數(shù)執(zhí)行的。
總結(jié)
現(xiàn)在我們已經(jīng)學(xué)會(huì)了如何使用icecream使打印更具可讀性。Icecream是一個(gè)很好的調(diào)試工具,希望你也會(huì)發(fā)現(xiàn)它的高效。
下載1:何愷明頂會(huì)分享
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析
下載2:終身受益的編程指南:Google編程風(fēng)格指南
在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):c++,即可下載。歷經(jīng)十年考驗(yàn),最權(quán)威的編程規(guī)范!
下載3 CVPR2020 在「AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):CVPR2020,即可下載1467篇CVPR?2020論文 個(gè)人微信(如果沒(méi)有備注不拉群!) 請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
覺(jué)得不錯(cuò)就點(diǎn)亮在看吧


