2017-03-07 6 views
-1

質問はかなりシンプルです:自分のコードを別のファイルに移動する必要があります。メインファイルでは、私はimport not_mainのような何かをします。インポートされたコードをメインファイルの一部として実行することは可能ですか?ここでは簡単な例です:インポートされたコードをメインファイルの一部として実行することはできますか?

__code 
    \__main.py 
    |__not_main.py 

main.py内容:

a = 5 
import not_main 

not_main.py内容:NameError: name 'a' is not defined

print a 

私はmain.pyを実行している、エラーがあります。どうすればそれを動作させることができますか?任意のヒントありがとう。

+2

あなたのコードを複数のファイルに分割すると、関数の境界に沿って分割を実行し、関数引数と戻り値を使って異なるファイルのコード間で通信することになっています。あるファイルを別のファイルにコピーし、 'import'を「この他のファイルの内容を今実行する」として扱います。 – user2357112

答えて

1

他のモジュールで定義されているモジュール内の変数を、そのモジュールを先にインポートしない限り、直接参照することはできません。メインモジュールであることに関係なく、2つのモジュール間で同じことをしようとするとこのエラーが発生します。インポートされたモジュールは、インポートされたモジュールのスコープを取得しません。

除外しようとしているコードがかなり複雑な場合、私は注意していますが、回避策が考えられます。しかし、あなたがそれを行うつもりならば、私は両方のモジュールで必要な変数を、それらの変数だけを含む第3のモジュールに分けることをお勧めします。あなたがこのターンになりましたので、簡単な例:

cross_module_variables.py:

a = 5 

main.py:

import not_main 

not_main.py:

import cross_module_variables as cmv 
print cmv.a 

の詳細については複雑なコードでは、いくつかのコードを実行してvaを生成した後、mainの変数の値を割り当てる必要があるかもしれませんルーその場合は、cross_module_variablesをメインモジュールにインポートし、そのモジュールに値を代入します。メインで使用する前に変数をインスタンス化しなければならないので、デフォルト値でcross_module_variableの変数を定義する必要があります。だから、もっとこのようになります:

cross_module_variables.py:

a = 0 

をmain.py:

import cross_module_variables as cmv 
cmv.a = 5 
import not_main 

not_main.py:

import cross_module_variables as cmv 
print cmv.a 

このanswer用を参照してください。モジュール間変数の詳細情報

これまで述べてきたことを踏まえれば、コードを他の元気な方法で再構築することを強くお勧めします。個別のコードセクションの周りに関数を定義するのではなく、すべてのコードをモジュールで直接実行しているように思えます。コヒーレントな機能プログラムを設計する方法を検討する必要があります。

関連する問題