2017-09-30 8 views
0

main.pyファイルの先頭にいくつかのインポートがあります。指定されたスクリプトの実行時に実行されたインポートされたモジュール

from python_elements import statistics 
from python_elements import trade 
from python_elements import advisory 

私はmain.pyを実行すると、以下のように、コードinitial_action = input("action: ")の行が出力にプロンプ​​トを想定している。

action: 

しかし、advisory.pyに組み込まれているプロンプト、インポートされたスクリプトの一つは、あります対応として

symbol: 

:私はこのように見えるようにmain.pyを実行したときに出力を引き起こして、代わりに与えられましたadvisory.pyの上からコードをINGのは、次のようになります。

symbol = input("symbol: ") 

私はimport文は、これらの線が最初に実行させるような理由としてわからないです、私は何をしないのですか?

+0

'python_elements'ディレクトリ内で' __init __。py'ファイルを使用している可能性がありますので、シンボル変数を含むadvisory.pyを実行しています。 '' advisory import * 'を試してみるか、pythonでモジュールをインポートする方法をチェックしてください – Manu

答えて

2

トップレベル/グローバルスコープの一部であるコードは、インポート時に実行されます。クラス、関数などを定義するコードを実行することによって、クラス、関数などを作成する方法です。

インポート時に望ましくない実行を防止するガード条件でインポートする必要があるモジュールを記述する必要があります。ここでは一例であり、モジュールファイルがexample.pyという名前で想定しています

class C: 
    pass 

def func(): 
    pass 

print(__name__) 
if __name__ == '__main__': 
    symbol = input("symbol: ") 

あなたはpython example.pyでスクリプトとしてモジュールを実行した場合、Pythonは文字列"__main__"に特別__name__変数の値を設定し、かつますprintステートメントは__main__を出力します。この場合、条件__name__ == '__main__'がTrueになるため、if文の本文内のコードが実行されます。モジュールはimport exampleでインポートされている場合、 `

しかし、__name__はモジュール(私たちの場合はexample)の名​​前とprint文だろう出力exampleに設定されます。クラスと関数を定義するコードは引き続き実行されますが、ifステートメントの本体のコードは、__name__ == '__main__'というFalseの条件で実行されません。

関連する問題