2016-10-07 7 views
2

私はそうのようなファイルがあります:ファイルを実行しているときにIPythonのグローバル変数をチェックすることはできますか?

import pandas a pd 

def a_func(): 
    print 'doing stuff' 

if __name__ == "__main__": 
    if 'data' not in globals(): 
     print 'loading data...' 
     data = pd.read_csv('datafile.csv') 

私はrun file.pyとIPythonでファイルを実行すると、それは常にデータをロードしますが、私はIPythonでglobals.keys()を印刷するとき、私はdata変数を見ることができます。私のfile.pyスクリプト内からIPythonからグローバル変数にアクセスする方法があるので、IPythonでスクリプトを実行するたびにデータをロードする必要はありませんか?

+0

IPythonは通常、 '%run'ファイルごとに新しい名前空間を作成し、その後、変数をあなたの対話型名前空間に転送します。対話的な名前空間で直接ファイルを実行したい場合は、 '%run -i'がそれを行います。 –

答えて

0

pythonファイルが実行されるたびに、globals()辞書はインタプリタによってリセットされます。だからあなたが何かをしようとするならば、

print globals().keys() 

あなたは 'データ'がグローバルにないことがわかります。この辞書は、プログラムの実行中に更新されます。だから私はプログラムでIPythonのglobals()を参照できるとは思わない。

これを確認してください。link、それに応じて、グローバルは空になります。

+0

私はIPythonでは、(特定の行が実行されていない/実行されていない場合でも)空の/なしの 'data'をグローバルスコープに先取りして置いていると思います。 – David

+0

このリンクを確認するには、https://docs.python.org/2/faq/programming.html#how-can-i-have-modules-that-mutually-import-each-other、それに応じてグローバルを空にします。 –

+0

ええ、10年以上の間、Pythonを使用していましたが、なぜ質問をした人が 'データ 'がグローバルにあると思うのか理解しようとしていました()。ちょうどそれをテストし、Cpy2はグローバルをあらかじめ割り当てておかないので、問題が発生します。 – David

関連する問題