在%run
魔术文档中,您可以找到:
-i在IPython的名称空间而不是空名称空间中运行文件。如果您要试验用文本编辑器编写的代码,该代码取决于交互式定义的变量,则此功能很有用。
因此,提供-i
就可以了:
%run -i 'script.py'
做到这一点的“正确”方法
也许上面的命令正是您所需要的,但是在这个问题得到所有关注的基础上,我决定为不知道如何使用pythonic方式的用户增加几分钱。
上面的解决方案有点笨拙,并且使另一个文件中的代码令人困惑(此x
变量从何而来?f
函数是什么?)。
我想向您展示如何做到这一点,而不必一遍又一遍地执行另一个文件。
只需将其转换为具有其自身功能和类的模块,然后从Jupyter笔记本或控制台导入即可。这还具有使其易于重用的优点,并且jupyters contextassantant可以帮助您自动完成,或者如果您编写了docstring,则可以显示docstring。
如果您要不断编辑另一个文件,那么将为autoreload
您提供帮助。
您的示例如下所示:
script.py
import matplotlib.pyplot as plt
def myplot(f, x):
"""
:param f: function to plot
:type f: callable
:param x: values for x
:type x: list or ndarray
Plots the function f(x).
"""
plt.plot(x, f(x))
plt.xlabel("Eje $x$",fontsize=16)
plt.ylabel("$f(x)$",fontsize=16)
plt.title("Funcion $f(x)$")
Jupyter控制台
In [1]: import numpy as np
In [2]: %load_ext autoreload
In [3]: %autoreload 1
In [4]: %aimport script
In [5]: def f(x):
: return np.exp(-x ** 2)
:
:
In [6]: x = np.linspace(-1, 3, 100)
In [7]: script.myplot(f, x)
In [8]: ?script.myplot
Signature: script.myplot(f, x)
Docstring:
:param f: function to plot
:type f: callable
:param x: x values
:type x: list or ndarray
File: [...]\script.py
Type: function
x
变量是本地的.ipynb
文件,不是你的.py
文件。该.py
文件不了解x
。找到一种在脚本之间传递该值的方法。有点像from myfile.ipynb import x
(不知道是否可以对.ipynb
文件进行这种类型的导入,但是您是否明白我的意思?