python - 在 jupyter/iPython notebook 脚本和类方法之间同步代码

标签 python pandas jupyter-notebook ipython-notebook jupyter

我正在尝试找出使 Jupyter/iPython notebook 中的代码与类方法中的相同代码保持同步的最佳方法。这是用例:

我在笔记本中使用 pandas 编写了一个长脚本,并且有多个单元格,这使得开发变得容易,因为我可以在笔记本中检查中间结果。这对于 pandas 脚本非常有用。我将该工作代码下载到一个 Python“.py”文件中,并将该脚本转换为我程序中 Python 类中的一个方法,该方法使用输入数据进行实例化,并提供输出作为该方法的结果。一切都很好。该 Python 类用于更大的应用程序,因此这是真正的交付物。

但是后来在方法的实现中出现了某个数据集的错误,我的脚本中也有错误。我可以回到我的笔记本,一步一步地通过各个单元格来找到问题。我解决了这个问题,但我必须小心地在常规 Python 类方法代码中进行更改。这有点痛苦。

理想情况下,我希望能够跨单元格运行类方法,这样我就可以检查中间结果。我不知道该怎么做。

那么保持脚本代码和嵌入类方法的代码同步的最佳实践是什么?

是的,我知道我可以将类导入到笔记本中,但是我无法通过单个单元格查看类方法内部的中间结果,这是我在纯脚本时所做的。对于 pandas,这非常有用。

最佳答案

我使用过与您相同的开发工作流程,并认识到能够使用 jupyter notebook 单步执行代码的值(value)。我开发了几个包,首先散列细节,然后最终将完善的产品移动到单独的 .py 文件中。我不认为有一个简单的解决方案可以解决您遇到的不便(我遇到了同样的问题),但我会描述我的做法(我没有那么大胆地​​宣称它是“最佳”做法)也许它将对您的用例有所帮助。

根据我的经验,一旦我从我的 jupyter notebook 创建了一个模块/包,就可以更轻松地在 notebook 外部维护/开发代码并将该模块导入 notebook 进行测试。

通常,保持每个方法较小是一种很好的做法,并且对于使用笔记本测试每一步的逻辑非常有帮助。您可以将较大的“公共(public)”方法分解为使用前导下划线(例如“_load_file”)命名的较小“私有(private)”方法。您可以在笔记本中调用“私有(private)”方法进行测试/调试,但模块的用户应该知道忽略这些方法。

您可以使用 importlib 模块中的 reload 函数来使用对源代码所做的更改快速刷新导入的模块。

import mymodule
from importlib import reload
reload(mymodule)

再次调用 import 实际上不会更新您的 namespace 。您需要 reload 函数(或类似函数)来强制 python 重新编译/执行模块代码。

不可避免地,您仍然需要逐行执行各个函数,但如果您已将代码分解为小方法,则需要在笔记本中“重写”的代码量非常少。

关于python - 在 jupyter/iPython notebook 脚本和类方法之间同步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38770604/

相关文章:

python - 如何在 Scikit-learn 中获取 OneHotEncoder 的维度数

python - boto s3 Bucket 与 get_bucket

python线性回归按日期预测

python - 如何在条形图上显示自定义值

python-3.x - ValueError:没有足够的值使用OpenCV中的Contour解包(预期3,得到2)

python - 如何将 numpy 矩阵的列移动到最后一列?

javascript - 编程语言中变量提升的优点和缺点是什么?

pandas - 从 Python 中的信号中删除尖峰

javascript - 在 jupyter 笔记本中使用匹配替换查找和替换实用程序

jupyter-notebook - Jupyter 中演示模式的快捷键