2016-08-04 7 views
2

私の問題がある は、if __name__ ==「__main__」の下に多くのコードを記述することが一般的です:文

import xxx 

def fun1() 
def fun2() 
... 

if __name__ == '__main__': 

    task = sys.argv[1] 
    if task =='task1': 
     do task1 
    elif task == 'task2': 
     do task2 
    ... 

のように私の現在のコーディングスタイルがあること

if __name__ == '__main__': 
下のコードの一部

は、上で定義した関数と比べてかなり大きいので、これは良いプログラミングスタイルではないと言われました。私は物事を修正し、各タスクで頻繁に実験を行い、コードのそれらの部分を、修正される可能性の低い機能から分離したいと考えているからです。私はここで、より多くのアドバイスを勉強したい、ありがとう! BusyAnt同様

+4

これをすべて単一の 'main()'関数にラップし、 'if __name__ == '__main __''の下でこの関数を呼び出してください。 – BusyAnt

+0

BusyAntに同意し、main()を定義して実行しますなぜなら、これがメインルーチンであれば '__name__ == __main__'が呼び出されるだけなので、インポート時にはそうではありません... – AnyOneElse

答えて

3

はそれを行うための一般的な方法は、

import xxx 

def fun1() 
def fun2() 
... 



def main(): 
    task = sys.argv[1] 
    if task =='task1': 
     do task1 
    elif task == 'task2': 
     do task2 
    ... 

if __name__ == '__main__': 
    main() 

これの逆は、それがimport上で実行されませんが、そう好適な場合main()はまだ別のモジュールまたはファイルから実行することが可能である、と述べました。

+1

@Uzzeeを引用してくれてありがとう、私は実際に自分自身から答えを書いていました。 :) – BusyAnt

+2

このファイルの名前が 'script1.py'で、' script2.py'という別のファイルにインポートした場合、 '' __name__''変数は '' __main __ ''と同じではなく' 'script1' 'のため、' main() 'はデフォルトでは実行されません。しかし、script2.pyファイルに 'script1.main()'とタイプして実行することもできます。 –

3

はそれはに、より良く、より読みやすいと考えられているもののmain()機能ですべてを包む、if __name__ == '__main__'の下でたくさんのことを書くためにを禁じられていません。このようにして、importこのモジュールを別のモジュールに入れた場合しかしのコードはimported_script.main()を呼び出して実行することができますが、main()のコードは実行されません。

あなたのコードは次のようになります。

import xxx 

def fun1() 
def fun2() 
... 


def main(): 
    task = sys.argv[1] 
    if task =='task1': 
     do task1 
    elif task == 'task2': 
     do task2 
    ... 

if __name__ == '__main__': 
    main() 

私はamong the many questions asked about it、このif文がやるんかについて読むことをお勧めします。

関連する問題