2017-01-27 12 views
0

私はこれらの2つの実装の間に違いがあるかどうか興味があります:あなたは、モジュールから機能main()をインポートすることを除いて唯一の実用的な関数main()の使用方法は?

+1

'main'は、特別なことではありません理解を向上させる機能だけ...すべてのことが起こるプログラムの「主要な」部分であることを意味する。他の関数呼び出しを1つの関数にラップすると、よりクリーンなIMOになります。それはあなたの議論の論理などを含める場所です。 – Li357

+1

あなたは以前のC/C++デベロッパーをより幸せにしています:) – miradulo

答えて

2

if __name__ == '__main__': 
    somecode() 

def main(): 
    somecode() 

if __name__ == '__main__': 
    main() 

と交互には、私が考えることができる違いは、今日私が以前に与えた答えに適用されたものですhereif __name__ == '__main__'ブロック内で直接、独自の機能main()ではなく、中にメインのロジックを定義する

は、簡単にプログラムが途中で終了する必要があるケースを処理することができます:

def main(): 
    ... 
    if not continue_program: 
     return 

    ... 
    if not continue_program: 
     return 

    ... 

if __name__ == '__main__': 
    main() 

から直接同じ動作を得ているためにifブロック、私はいくつかの条件体を入れ子にする必要がありました(またはsys.exit()のような醜い何かを使用しました)。あなたが与えられた正確なコードをお持ちの場合

+0

'if __name __ ==' __main__ ''の後にif文を入れないのはなぜですか? – freude

+0

@freude自分のコードの本体にはある関数内で実行されているので、私は 'return'を使うことができないので、私が答えて言ったように私は醜い入れ子条件ブロックを使う必要があります。 – Tagc

+1

@freudeまた、関数内で実行されるコードは、ローカル名の参照がグローバル名の参照より高速であるため、グローバルコンテキストで実行されるコードより効率的です。 –

2

は、その後、直接somecode()を呼び出すと、私にはきれいに見えます:Pythonで、mainはちょうど別の関数およびC/Javaでのようではない特別な機能であるため、

if __name__ == '__main__': 
    somecode() 

これは、 。

しかし、あなたの主な機能は、複数の機能、

def main(): 
    somecode1() 
    somecode2()  
    somecode3() 

if __name__ == '__main__': 
    main() 

は今、さまざまな機能の相互作用が、今のコードをモジュールとラッパー機能することができますを作成し、以下の代替、理由ビーイング、よりクリーンでを呼び出す場合他の場所に輸入される。

if __name__ == '__main__': 
    somecode1() 
    somecode2()  
    somecode3() 

def main(): 
    somecode1() 
    somecode2()  
    somecode3() 

if __name__ == '__main__': 
    main() 

がに相当し、メインである、という注意はここで再び、関数の別名である

def somecode(): 
    somecode1() 
    somecode2()  
    somecode3() 

if __name__ == '__main__': 
    somecode() 
関連する問題