2016-06-17 11 views
0

私はいくつかのファイルに私のpythonコードを分割しようとしている:Pythonの複数のファイルの変数と関数は

file1.py

from file2 import * 

var1 = 7 
func_file2() 

​​

def func_file2(): 
    var2 = var1 

だから、それは言います:

NameError: global name 'var1' is not defined 

どうすれば修正できますか?

file2をfile2にインポートしようとしました。

+0

インポートには '*'を使わないでください。あなたの名前空間を混乱させ、同じ名前を持つ2つの変数、あるいは組み込み関数と同じ名前の変数を持つと面白い問題を引き起こす可能性があります。ちょうど一般的なヒント。 – Ian

+0

ええ、申し訳ありませんが、変数名を変更して理解しやすくしました。 –

+0

と周期的な輸入をしないでください!これを読んでください:http://stackoverflow.com/questions/37756028/import-module-defined-in-other-module/37756322#37756322 – Quirk

答えて

0

func_file2は変数var1の可視性を持っていません。なぜなら、var1が任意のスコープに存在しないため、クロージャが機能しないからです。

モジュールをPythonで書く場合、モジュールの関数が別のモジュールの変数を使用する場合、何かが間違っている可能性があるという結束の原則に従ってください。

1

var1は、file1で定義されていますが、file2で参照しています。エラーを修正するには、var1file2に移動してください。

file1.py

from file2 import *  
func_file2() 

file2.py

def func_file2(): 
    var1 = 7 
    var2 = var1 

両方(あなたはvar1を定義する最初のfile2file1をインポートするために誘惑されるかもしれないが、それは巡回輸入を引き起こしますfile1 & file2は互いに参照するであろう)。

+0

Pythonでゲッターを使用するのが一般的ですか、このコーディング方法を使用する必要がありますか? –

+0

@SteevenBrunner http://stackoverflow.com/questions/2627002/whats-the-pythonic-way-to-use-getters-and-setters – Ken

0

私はあなたがこのような何かを行うことができます、あなたはそれが今であるように動作するようにしたい場合は、しかし、グローバル変数を使用することを示唆していない:

first file 
global var1 
var1 = 7 

second file 
from first_file_name import var1 #this will make your var1 accessible from the second file 

を、私はそれが役に立てば幸い。

関連する問題