私はPythonノートブックに取り組んでいます。大きな入力コード[input][* .PY]ファイルにパックして、このファイルをノートブック。
ノートブックから[。PY]ファイルを実行するアクションは既知であり、コマンドはLinuxとWindowsで異なります。 ただし、このアクションを実行してノートブックから[.PY]ファイルを実行すると、ノートブックにロードされた既存のライブラリまたは変数は認識されません([。PY]ファイルはゼロから始まります...)。
これを修正する方法はありますか?
問題の簡単な例は次のとおりです。
In[1]:
import numpy as np
import matplotlib.pyplot as plt
In[2]:
def f(x):
return np.exp(-x ** 2)
In[3]:
x = np.linspace(-1, 3, 100)
In[4]:
%run script.py
「script.py」の内容は次のとおりです。
plt.plot(x, f(x))
plt.xlabel("Eje $x$",fontsize=16)
plt.ylabel("$f(x)$",fontsize=16)
plt.title("Funcion $f(x)$")
%run
魔法のドキュメント で見つけることができます:
-i空のファイルの代わりにIPythonの名前空間でファイルを実行します。これは、インタラクティブに定義された変数に依存するテキストエディターで記述されたコードを試す場合に便利です。
したがって、-i
を指定すると、次のトリックが実行されます。
%run -i 'script.py'
それを行う「正しい」方法
たぶん上記のコマンドはあなたが必要とするものだけかもしれませんが、この質問にすべての注意を払って、よりPython的な方法がどのように見えるかを知らない人のためにさらに数セントを加えることにしました。
上記の解決策は少しハッキングされ、他のファイルのコードを混乱させます(このx
変数はどこから来たのですか?f
関数とは何ですか?)。
実際に他のファイルを何度も実行することなく、それを行う方法を示したいと思います。
独自の関数とクラスを備えたモジュールに変換し、Jupyterノートブックまたはコンソールからインポートします。これには、再利用しやすいという利点もあります。jupyterscontextassistantは、オートコンプリートを支援したり、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).
"""
# yes, you can pass functions around as if
# they were ordinary variables (they are)
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
以下の行も機能します
!python script.py
たぶん非常にエレガントではありませんが、それは仕事をします:
exec(open("script.py").read())
!python 'script.py'
script.pyを実際のファイル名に置き換えます。忘れないでください ''