2017-03-11 5 views
-4

モジュール内で関数(def func)と変数(var =)を定義するとします。関数はモジュールから継承します...なぜ変数はありませんか?

あなたのmain.pyにそのモジュールをインポートすると、その関数は引き継がれますが(つまり使用することができます)、変数は継承されません。つまり、varをmain.pyに再割当てする必要がありますそれはmain.pyにあります)。

これが発生する理由はありますか?回避策がありますか?

+2

コードの意味を表示できますか?モジュールは、関数と変数を同じように扱います。 – Denziloe

+2

実際にはPythonで 'def func'は' func'という変数を作成し、関数オブジェクトを参照します。 – Liteye

+0

モジュールをインポートする場合は、 'from module import foo、bar'を使用して、インポートするものを指定するか、' import module'を使用してモジュール全体をインポートし、 'module.foo + 1 'と' module.bar(module.foo) 'のようになります。 'from module import *'を使ってモジュールから現在の名前空間にすべてをインポートすることもできますが、それはお勧めできません。 –

答えて

0

モジュールスコープのすべての関数と変数がインポートされます。変数が初期化されているか、関数内に代入されている場合は、その関数が実行されるまでその値が表示されないことがあります。変数の最新の値を確実に取得するには、variable_nameではなくmodule_name.variable_nameを使用する必要があります。

私たちはあなたがまだ10が表示されますt2.pyあなたが実行した場合は、2つのソースファイルがt1.py持っているとt2.py

t1.py

v1 = 10 

def f1(): 
    global v1 
    v1 = 11 

t2.py

from t1 import f1, v1 

f1() 
print(v1) 

としましょうしかし、t2.pyを次のように変更した場合:

import t1 

t1.f1() 
print(t1.v1) 

11を表示します。

追加されました。 v1がリストまたは辞書(またはオブジェクト)の場合、追加のmodule_name修飾子は必要ありません。それらは参照によってにアクセスされるので、それがなくても値が表示されます。

関連する問題