自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不再使用 Print 來Debug了, IceCream 來了!

開發(fā) 前端
用print()語句進行調(diào)試是一種混亂的、不優(yōu)雅的方法。將輸出映射到其相應的調(diào)試語句是很混亂的。此外,它需要額外的手動格式化來理解輸出。

寫在前面

在編程過程中,Bug幾乎是不可避免的。其實大部分程序員花了大量的時間進行Debug(調(diào)試),以使他們的代碼沒有Bug。?

圖片

在調(diào)試時,最常用的方法無疑是選擇使用print()語句來了解 pipeline 流程以及發(fā)現(xiàn)bug。

然而,使用print()有許多注意事項,例如:

  • 打印語句通常是為了向用戶顯示一個輸出。如果程序員使用print()?進行調(diào)試,在調(diào)試結束后,程序員應該謹慎地只刪除那些特定的print()語句,這些語句是用來調(diào)試的。
  • 通常,在調(diào)試期間,你可能會一個接一個地打印多個變量。在這種情況下,程序員必須手動格式化輸出以增強其可讀性。
var_1 = 1
var_2 = 2
print(var_1)
print(var_2)
1
2

上面,我們打印了兩個變量。雖然在這里我們知道第一個變量是var_1?,第二個是var_2,但隨著變量數(shù)量的增加,可能需要你在代碼和輸出之間來回尋找,以找出哪個輸出對應于哪個變量。

當然,我們可以打印更多的細節(jié),像下面這樣,但這只是增加了你的工作,如果我們一直在做像這樣的工作,不就需要996了。

var_1 = 1
var_2 = 2
print("var_1 =", var_1)
print("var_2 =", var_2)
var_1 = 1
var_2 = 2
  • 有時,程序員可能還需要對打印行號、函數(shù)名稱及其輸入等,這增加了編寫又長、又多的print()語句的復雜性。
  • 在大多數(shù)情況下,代碼庫不只限于一個文件。相反,有多個文件組成管道。在這種情況下,人們可能有興趣在調(diào)試時也顯示文件的名稱,而用print()會很麻煩。

上述原因使得print()(至少對我來說)成為最糟糕的調(diào)試選項。

值得慶幸的是,在Python中有一個很好的替代方案 —— IceCream[1] ??!

IceCream

IceCream是一個Python庫,它使Debug不費吹灰之力,并能用最少的代碼查看調(diào)試結果。

它常用的功能包括打印表達式、變量名、函數(shù)名、行號、文件名等等。

安裝 IceCream

你可以使用 pip?來安裝 icecream庫。

pip install icecream

導入IceCream

使用這個庫的標準慣例是導入ic模塊,如下所示。

from icecream import ic

開始使用IceCream

使用 IceCream 庫就像 print 語句一樣簡單。你需要把 print()? 替換為 ic()。就是這樣。

ic(var_1)
ic(var_2)
ic| var_1: 1
ic| var_2: 2

注意區(qū)別!ic()不僅打印值,而且還打印所傳遞的變量的名稱。

IceCream 不僅僅局限于一個變量。相反,你可以在函數(shù)、類等方面使用它。

def func(num):
return num * 2
ic(func(3))
ic| func(3): 6

超酷!它打印了方法的名稱(func?),傳遞的參數(shù)(3?)和輸出(6)。

每一個進入ic()?方法的表達式?都會被打印出來,同時還有表達式的數(shù)值,如下圖所示。

圖片

Icecream同時打印表達式和它的值

用 IceCream Debug 也可以應用于普通的 Python 數(shù)據(jù)結構。下面是一個Python字典的例子。

sample_dict = {1:"A", 2:"B", 3:"C"}
ic(sample_dict[1])
ic| sample_dict[1]: 'A'

檢查執(zhí)行情況

很多時候,程序員使用print()來顯示有意義的(有時是隨機的)語句來確定程序的流程。

def func(input_num):
if input_num == 1:
print("If Executed!")
...
else:
print("Else Executed!")
...

IceCream也可以避免那些奇怪的聲明。

## icecream_demo.py
from icecream import ic
def func(input_num):
if input_num == 1:
ic()
...
else:
ic()
...
func(2)

只要調(diào)用ic()就可以了。它將打印文件名、行號和其他細節(jié)(如函數(shù)名,如果有的話)以及時間。這樣看,是不是非常簡單。

使用IceCream項目范圍

接下來,你可能會想,print() 函數(shù)是Python 的內(nèi)置庫,使用方便,不需每次都import。而我們的IceCream 是否需要在每個Python文件中都導入這個庫?當然不是!

為了使方法在所有項目文件中可用,在根文件中導入icecream的install模塊,如下所示。

## main_file.py
from icecream import install
install()
from help_file import func
func(2)

## help_file.py
def func(num):
ic(num)
return 2*num

通過install,ic()可以在整個項目中使用。

添加一個自定義前綴

如果你注意到上面,ic()?語句的輸出以"ic|"開始。那是IceCream提供的默認前綴。

然而,如果由于某種原因,你希望用一個自定義的前綴來代替它,我們可以通過在 ic.configureOutput()? 方法中指定 prefix 參數(shù)來實現(xiàn)的,如下所示。

from icecream import ic
ic.configureOutput(prefix='ic debug| -> ')
ic("A custom prefix")

調(diào)試后刪除IceCream語句

一旦你的代碼調(diào)試結束,你可能想刪除所有不必要的調(diào)試語句。

由于ic()?語句在語法上與print()?不同,你可以在編輯器中搜索"ic("模式并刪除這些語句,如下所示。

圖片

從代碼中刪除ic()語句

另外,你可以使用ic.disable()?來停止ic()?的打印。如果你想再次使用它們,請使用ic.enable()。

寫在最后

用print()語句進行調(diào)試是一種混亂的、不優(yōu)雅的方法。將輸出映射到其相應的調(diào)試語句是很混亂的。此外,它需要額外的手動格式化來理解輸出。

如上所述,Python 中的 IceCream 庫是一個很好的替代品。它使調(diào)試不費吹灰之力,可讀性強,代碼最少。如果你覺得本文對你有所幫助,可以點個贊和在看!

圖片

參考資料:

[1]IceCream: https://github.com/gruns/icecream

責任編輯:武曉燕 來源: 數(shù)據(jù)STUDIO
相關推薦

2024-11-15 13:15:36

2021-08-13 14:08:24

Windows 11Windows微軟

2009-10-15 08:52:42

Windows 7銷售市場

2023-03-16 19:17:57

2018-08-24 06:13:18

IPv6SDNIPv4

2021-04-19 11:45:31

Pythonswitch編程語言

2021-04-16 15:02:38

Python 開發(fā)編程語言

2020-02-11 13:05:42

Wi-Fi 65GWi-Fi

2012-07-16 14:32:44

2020-04-13 17:17:28

MySQL8.0功能

2021-11-17 10:18:31

iOS蘋果系統(tǒng)

2010-08-06 12:01:46

RIP協(xié)議IPv6

2022-02-13 00:03:06

AndroidAndroid 13安卓

2013-07-17 10:07:29

Windows Pho功能

2013-02-25 10:33:52

Windows 8Windows Blu

2011-06-03 09:33:01

Windows 8

2022-05-31 16:08:25

Web3算法挑戰(zhàn)

2017-03-13 08:40:45

AndroidDebugBuildConfig

2012-03-12 10:31:17

XeonE5-2600

2023-07-26 19:22:04

WiFi 7WiFi 6
點贊
收藏

51CTO技術棧公眾號