IPythonから関数を実行し、すべてのデータを対話型の名前空間にロードしたいと思います。%run filename.py
のようにします。例えば、ここにファイルscratch.py
です:IPythonで%IPythonでPython関数を実行する
def foo(x):
a = x*2
が、私はこの関数を実行し、名前a
にアクセスできるようにしたいと思います。これを行う方法はありますか?
IPythonから関数を実行し、すべてのデータを対話型の名前空間にロードしたいと思います。%run filename.py
のようにします。例えば、ここにファイルscratch.py
です:IPythonで%IPythonでPython関数を実行する
def foo(x):
a = x*2
が、私はこの関数を実行し、名前a
にアクセスできるようにしたいと思います。これを行う方法はありますか?
グローバル(またはいくつかのインタラクティブIPythonセッションで)変数を使用できるようにするためには、あなたが最初のグローバルとして定義する必要があります。
def foo(x):
global a
a = x*2
そうでなければ、あなたのa
はあなたの関数内のローカル変数のまま。より多くの情報ここでは:Use of “global” keyword in Python
これはipython
または%run
の問題ではなく、関数で作成された変数でできることの質問です。 Pythonで実行されるすべての関数に適用されます。
関数にはlocal
という名前空間があり、そこにはその関数で定義した変数が置かれます。つまり、関数によってローカルに設計されています。呼び出し元の名前空間(モジュールのグローバルまたは呼び出し関数のローカル)に「流出」することは想定されていません。これは、関数を使うことからの主要な理由です - 関数を呼び出し元から変数を分離することです。
あなたはいくつかのことを行うことができます関数内の変数を参照する必要がある場合:(デバッグ目的のために、一時的な)
これは役に立たない機能である:これはすっきりとしたデザインでは、いくつかの値
def foo(x):
a = x*2
return a
def foo(x):
a = x*2
print(a) # temporary debugging print
# do more with a and x
return ...
を有していてもよい
def foo(x):
a = x*2
、関数は側を最小限に抑えて、引数を取り、その値を返します効果。グローバル変数を設定することは、コードのデバッグをより困難にする副作用です。
IPythonから 'foo'を呼び出して' a'にアクセスするにはどうしたらいいですか?私は最初から 'foo(2)'を試しましたが、定義されていないということを 'a'と打つとNameErrorを取得します。 – bcf
関数の最後に 'return a'を追加します。 – Sosel