日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
答應(yīng)我,別再用Print調(diào)試Python了!

 相信大部分人學(xué)習(xí)Python,肯定會用print()這個內(nèi)置函數(shù),來調(diào)試代碼的。

滿城網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

那么在一個大型的項(xiàng)目中,如果你也是使用print來調(diào)試你的Python代碼,你就會發(fā)現(xiàn)你的終端有多個輸出。

那么你便不得不去分辨,每一行的輸出是哪些代碼的運(yùn)行結(jié)果。

舉個例子,運(yùn)行下面這個程序。

 
 
 
 
  1. num1 = 30 
  2. num2 = 40  
  3. print(num1) 
  4. print(num2)

輸出結(jié)果。

 
 
 
 
  1. 30 
  2. 40

這些輸出中哪一個是num1?哪一個又是num2呢?

找出兩個輸出可能不是很困難,但是如果有五個以上的不同輸出呢?嘗試查找與輸出相關(guān)的代碼可能會很耗時。

當(dāng)然你可以在打印語句中添加文本,使其更容易理解:

 
 
 
 
  1. num1 = 30 
  2. num2 = 40  
  3. print("num1" num1) 
  4. print("num2" num1)

輸出結(jié)果。

 
 
 
 
  1. num1 30 
  2. num2 40

這個結(jié)果就很容易理解了,但是需要時間去寫相關(guān)的信息。

這時就該「Icecream」上場了~

01. 什么是Icecream?

Icecream是一個Python第三方庫,可通過最少的代碼使打印調(diào)試更清晰明了。

使用pip安裝Icecream庫。

 
 
 
 
  1. pip install icecream

下面,讓我們通過打印Python函數(shù)的輸出來進(jìn)行嘗試。

 
 
 
 
  1. from icecream import ic  
  2. def plus_five(num): 
  3.     return num + 5 
  4. ic(plus_five(4)) 
  5. ic(plus_five(5))

輸出結(jié)果如下。

 
 
 
 
  1. ic| plus_five(4): 9 
  2. ic| plus_five(5): 10

通過使用icecream,我們不僅可以看到函數(shù)輸出,還可以看到函數(shù)及其參數(shù)!

02. 檢查執(zhí)行情況

如果你想要找到執(zhí)行代碼的位置,可以通過執(zhí)行如下所示的操作,來查找執(zhí)行了哪個語句。

 
 
 
 
  1. def hello(user:bool): 
  2.     if user: 
  3.         print("I'm user") 
  4.     else: 
  5.         print("I'm not user") 
  6. hello(user=True)

輸出結(jié)果。

 
 
 
 
  1. I'm user

使用icecream則無需多余的文本信息,就可以輕松地完成上述的操作。

 
 
 
 
  1. from icecream import ic  
  2. def hello(user:bool): 
  3.     if user: 
  4.         ic() 
  5.     else: 
  6.         ic() 
  7. hello(user=True)

輸出結(jié)果如下。

 
 
 
 
  1. ic| ice_1.py:5 in hello() at 02:34:41.391

從輸出結(jié)果看,函數(shù)hello中的第5行的代碼已被執(zhí)行,而第7行的代碼未執(zhí)行。

03. 自定義前綴

如果您想在打印語句中插入自定義前綴(例如代碼執(zhí)行時間),icecream也是能實(shí)現(xiàn)的。

 
 
 
 
  1. from datetime import datetime 
  2. from icecream import ic  
  3. import time 
  4. from datetime import datetime 
  5. def time_format(): 
  6.     return f'{datetime.now()}|> ' 
  7. ic.configureOutput(prefix=time_format) 
  8. for _ in range(3): 
  9.     time.sleep(1) 
  10.     ic('Hello')

輸出結(jié)果如下。

 
 
 
 
  1. 2021-01-24 10:38:23.509304|> 'Hello' 
  2. 2021-01-24 10:38:24.545628|> 'Hello' 
  3. 2021-01-24 10:38:25.550777|> 'Hello'

可以看到代碼的執(zhí)行時間,就顯示在輸出的前面。

04. 獲取更多的信息

除了知道和輸出相關(guān)的代碼之外,你可能還想知道代碼執(zhí)行的行和代碼文件。

在ic.configureOutput()中,設(shè)置includeecontext的參數(shù)值為True即可。

 
 
 
 
  1. from icecream import ic  
  2. def plus_five(num): 
  3.     return num + 5 
  4. ic.configureOutput(includeContext=True) 
  5. ic(plus_five(4)) 
  6. ic(plus_five(5))

輸出結(jié)果如下。

 
 
 
 
  1. ic| ice_test.py:7 in - plus_five(4): 9 
  2. ic| ice_test.py:8 in - plus_five(5): 10

這里我們就知道了,第一個輸出是由函數(shù)plus_five在文件icecream_example.py的第7行執(zhí)行的。

第二個輸出則是由函數(shù)plus_five在代碼文件的第8行執(zhí)行的。

上述兩個操作都用到了ic.configureOutput()函數(shù)。

通過查看源碼,可知有四個可供設(shè)置的參數(shù)。

  •  prefix,自定義輸出前綴
  •  outputFunction,更改輸出函數(shù)
  •  argToStringFunction,自定義參數(shù)序列化字符串
  •  includeContext,顯示文件名、代碼行、函數(shù)信息

05. 刪除Icecream代碼

最后你可以將icecream僅用于調(diào)試,而將print用于其他目的(例如漂亮的打印)。

 
 
 
 
  1. from icecream import ic 
  2. def plus_five(num): 
  3.     return num + 5 
  4. ic.configureOutput(includeContext=True) 
  5. ic(plus_five(4)) 
  6. ic(plus_five(5)) 
  7. for i in range(10): 
  8.     print(f'****** Training model {i} ******')

輸出結(jié)果。

 
 
 
 
  1. ic| ice_1.py:7 in - plus_five(4): 9 
  2. ic| ice_1.py:8 in - plus_five(5): 10 
  3. ****** Training model 0 ****** 
  4. ****** Training model 1 ****** 
  5. ****** Training model 2 ****** 
  6. ****** Training model 3 ****** 
  7. ****** Training model 4 ****** 
  8. ****** Training model 5 ****** 
  9. ****** Training model 6 ****** 
  10. ****** Training model 7 ****** 
  11. ****** Training model 8 ****** 
  12. ****** Training model 9 ******

由于你可以區(qū)分調(diào)試打印和漂亮打印,因此搜索和刪除所有ic調(diào)試語句非常容易。

刪除所有調(diào)試代碼后,你的Python代碼就整潔了。

總結(jié)

到此,你就應(yīng)該就學(xué)會了如何使用icecream去打印調(diào)試。


網(wǎng)頁題目:答應(yīng)我,別再用Print調(diào)試Python了!
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/dpdoejp.html