2011-06-20 4 views
2

私はちょうど、Eclipseの新しいコピーを作成し、pydevをインストールしました。すべてのモジュールはなぜ一緒に動作するのですか?

''' 
Created on 18.06.2009 

@author: Lars Vogel 
''' 
def add(a,b): 
    return a+b 

def addFixedValue(a): 
    y = 5 
    return y +a 

print "123" 

run.py:

''' 
Created on Jun 20, 2011 

@author: Raymond.Yeung 
''' 
from FirstModule import add 

print add(1,2) 
print "Helloword" 
私の最初の試験では

は日食とPyDevはを使用するために、私は(デフォルト1)

FirstModule.pyのsrcパッケージの下2モジュールを作成しました

実行ボタンのプルダウンメニューを選択して「ProjectName run.py」をクリックすると、結果は次のようになります。

123 
3 
Helloword 

Apparantly両方のモジュールが実行された理由は何ですか?これはデフォルト設定ですか?

答えて

10

モジュールをインポートすると、モジュール内のすべてが「実行」されます。これは、クラスと関数オブジェクトが作成され、グローバル変数が設定され、printステートメントが実行されることを意味します。 *)

モジュールがこのような場合、ブロック内直接実行されたときにのみ実行されることを意図文同封するのが一般的である:今、あなたのようにモジュールを実行した場合

if __name__ == "__main__": 
    print "123" 

をスクリプトの__name__"__main__"に設定されているため、"123"が印刷されます。しかし、__name__のモジュールを他の場所からインポートした場合は、ではなく、"FirstModule"になるので、ブロック内にあるものは実行されません。

*)同じモジュールをもう一度インポートすると、ではなく、が再び実行されます。 Pythonはインポートされたモジュールを追跡し、2回目にすでにインポートされたモジュールを再利用します。これにより、ヘッダーファイル本体をIFNDEFステートメントで囲むようなC/C++トリックが、ヘッダーが一度だけPythonで不要にインポートされるようにします。

関連する問題