你是否運行過for循環并希望在for循環內的代碼中添加更多詳細信息?你可能會決定不這樣做,因為添加更多詳細信息意味著需要停止代碼并重新運行所有內容。
代碼已經運行了幾個小時,停止代碼會讓人不爽。如果可以在每次迭代中重新加載循環體而不丟失如下所示的狀態,那不是很好嗎?
在本文中,我將向大家展示兩個工具,這些工具可在Python/ target=_blank class=infotextkey>Python文件更改時重新加載代碼或運行任意命令。
1、Entr
Entr:Python文件更改時運行任意命令
entr 工作原理
允許你在文件更改時運行任意命令。為了了解entr會有什么幫助,我們想創建一個函數,該函數需要一個數字列表并返回偶數。
我們將上面的文件命名為entr_examples.py,然后使用pytest檢查get_evens函數是否返回偶數。
$ pytest entr_examples.py
測試失敗,因為我們尚未向get_evens函數添加任何代碼。要嘗試以其他方式獲取偶數,請在代碼更改時使用entr重新運行pytest entr_examples.py命令。
$ ls entr_examples.py | entr python entr_examples.py
太cool了,通過使用entr,我們無需在開發功能時再次重新運行同一命令。由于"測試驅動開發"的第一條法則是"除非編寫了失敗的單元測試,否則你不得編寫生產代碼",因此entr鼓勵開發人員以其他方式測試編寫代碼的方法,直到其起作用為止。
語法
以下是entr的常規語法:
請注意,如果想一次跟蹤多個Python文件,請使用ls * .py
安裝
要在macOS上安裝entr,請輸入:
brew install entr
要在Ubuntu上安裝entr,請輸入:
sudo apt-get update
sudo apt-get install entr
另一個選擇是克隆entr repo并按照安裝說明進行操作。
2、Reloading
Reloading:重新加載循環主體而不會丟失其狀態
要了解 Reloading 的有用性,我編寫了一個打印偶數的 python 函數。但是,在循環運行時,還希望它在不停止循環的情況下輸出奇數。
通常,這無法在Python中完成。在下面的代碼中,即使我們在執行過程中將「print(f'{num} is odd')」 添加到循環主體中,輸出中也沒有奇數。
但是,可以很容易地通過重新加載來完成。下面的GIF顯示了如何將重載添加到循環中可以有所作為。
如我們所見,在執行過程中向循環體中添加else語句后,將打印出奇數!
Reloading 在這里似乎并沒有真正的幫助,因為執行for循環不需要花費很長時間。但是,如果你已經訓練了數小時的深度學習模型,并且想要在每個 epoch 中打印更多統計信息而不停止循環,這將變得非常方便。
語法
要使用reloading,只需將其添加到如下所示的Python循環中:
安裝
pip install reloading
結論
剛剛我介紹了如何在更改Python文件時運行任意命令,并重新加載Python循環主體而不會丟失其狀態?,F在,如果你感興趣,可以在日常工作中進行嘗試,關注我獲取更多有意思的干貨!