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

答應(yīng)我,別再用Print調(diào)試Python了!

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

[[379262]]

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

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

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

舉個例子,運行下面這個程序。 

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

輸出結(jié)果。 

  1. 30  
  2. 40 

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

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

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

  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ù)的輸出來進行嘗試。 

  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也是能實現(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 <module>- plus_five(4): 9  
  2. ic| ice_test.py:8 in <module>- 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 <module>- plus_five(4): 9  
  2. ic| ice_1.py:8 in <module>- 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)試。 

 

責任編輯:龐桂玉 來源: 機器學(xué)習(xí)算法與Python學(xué)習(xí)
相關(guān)推薦

2020-12-02 11:18:50

print調(diào)試代碼Python

2020-12-04 10:05:00

Pythonprint代碼

2020-09-08 08:45:39

jupyter插件代碼

2024-06-12 13:54:37

編程語言字符串代碼

2021-06-09 06:41:11

OFFSETLIMIT分頁

2020-12-03 09:05:38

SQL代碼方案

2020-12-15 08:06:45

waitnotifyCondition

2023-10-26 16:33:59

float 布局前段CSS

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2022-01-27 07:48:37

虛擬項目Django

2020-07-17 07:15:38

數(shù)據(jù)庫ID代碼

2024-12-26 07:47:20

2019-03-12 14:48:29

路由器XBOXPS4

2022-10-27 21:34:28

數(shù)據(jù)庫機器學(xué)習(xí)架構(gòu)

2022-03-10 10:12:04

自動化腳本Bash

2023-09-08 08:35:42

層疊樣式表CSS

2023-06-26 08:20:02

openapi格式注解

2023-09-14 12:03:30

空指針判空

2020-12-07 06:05:34

apidocyapiknife4j

2020-05-19 17:09:33

Pandas大數(shù)據(jù)數(shù)據(jù)分析
點贊
收藏

51CTO技術(shù)棧公眾號