Ipython 笔记本:提取方法的优雅方式?

Ipython Notebook: Elegant way of extracting method out?

随着我的笔记本越来越长,我想提取一些代码,这样笔记本会更容易阅读。

例如,这是我要从笔记本

中提取的cell/function
def R_square_of(MSE, kde_result):
    # R square measure:
    # https://en.wikipedia.org/wiki/Coefficient_of_determination
    y_mean = np.mean(kde_result)
    SS_tot = np.power(kde_result - y_mean,2)
    SS_tot_avg = np.average(SS_tot)

    SS_res_avg = MSE
    R_square = 1 - SS_res_avg/SS_tot_avg

    return R_square

我怎样才能有效地做到这一点?

我的想法:

  1. 很容易创建一个 my_helper.py 并将代码放在上面,然后 from my_helper import *
  2. 问题是,我可能会在方法中使用其他包(在这种情况下,np,即numpy),那么我需要重新导入 my_helper.py 中的 numpy。它可以重新使用在 ipython notebook 中创建的环境,因此不需要重新导入吗?
  3. 如果我更改 my_helper.py 中的代码,我需要 重新启动内核 以加载更改 (NameError: global name 'numpy' is not defined),这使得它很难更改该文件中的代码。

您可以 运行 使用 %run magic command:

代替导入您的其他文件
In [1]: %run -i my_helper.py

-i: run the file in IPython’s namespace instead of an empty one. This is useful if you are experimenting with code written in a text editor which depends on variables defined interactively.


我仍然会借此机会推荐将文件编写为适当的 python 模块并导入它。通过这种方式,您实际上开发了一个可在笔记本环境之外使用的代码库。您可以为其编写测试或将其发布到某处。