你是否运行过for循环并希望在for循环内的代码中添加更多详细信息?你可能会决定不这样做,因为添加更多详细信息意味着需要停止代码并重新运行所有内容。
代码已经运行了几个小时,停止代码会让人不爽。如果可以在每次迭代中重新加载循环体而不丢失如下所示的状态,那不是很好吗?
在本文中,我将向大家展示两个工具,这些工具可在Python/ target=_blank class=infotextkey>Python文件更改时重新加载代码或运行任意命令。
Entr:Python文件更改时运行任意命令
允许你在文件更改时运行任意命令。为了了解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并按照安装说明进行操作。
Reloading:重新加载循环主体而不会丢失其状态
要了解 Reloading 的有用性,我编写了一个打印偶数的 python 函数。但是,在循环运行时,还希望它在不停止循环的情况下输出奇数。
通常,这无法在Python中完成。在下面的代码中,即使我们在执行过程中将「print(f'{num} is odd')」 添加到循环主体中,输出中也没有奇数。
但是,可以很容易地通过重新加载来完成。下面的GIF显示了如何将重载添加到循环中可以有所作为。
如我们所见,在执行过程中向循环体中添加else语句后,将打印出奇数!
Reloading 在这里似乎并没有真正的帮助,因为执行for循环不需要花费很长时间。但是,如果你已经训练了数小时的深度学习模型,并且想要在每个 epoch 中打印更多统计信息而不停止循环,这将变得非常方便。
要使用reloading,只需将其添加到如下所示的Python循环中:
pip install reloading
刚刚我介绍了如何在更改Python文件时运行任意命令,并重新加载Python循环主体而不会丢失其状态。现在,如果你感兴趣,可以在日常工作中进行尝试,关注我获取更多有意思的干货!