Ipython Notebook:提取方法的优雅方法?

时间:2016-01-30 11:03:39

标签: python refactoring ipython-notebook jupyter-notebook

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

例如,这是我要从笔记本中提取的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. 非常简单
  3. 问题在于,我可能会在方法中使用其他包(在本例中为np,即numpy),然后我需要重新导入 numpy在my_helper.py。它可以重用ipython notebook中创建的环境,因此无需重新导入吗?
  4. 如果我更改了my_helper.py中的代码,我需要重新启动内核来加载更改(NameError: global name 'numpy' is not defined),这样就很难更改该文件中的代码

1 个答案:

答案 0 :(得分:3)

您可以使用%run magic command

运行它,而不是导入其他文件
In [1]: %run -i my_helper.py
  

-i:在IPython的命名空间中运行该文件而不是空文件。如果您正在尝试使用文本编辑器编写的代码,这非常有用,该编辑器依赖于交互式定义的变量。

我仍然借此机会建议将文件编写为适当的python模块并导入它。这样,您实际上可以开发在笔记本环境之外可用的代码库。您可以为它编写测试或将其发布到某个地方。