• __name__=__main__の意味をわかりやすく解説

    コードを見ているとたまに見かける__name__=__main__というコード。

    これが何を意味しているのか良く分からないですよね。

    しかし、順番を追って整理していくと簡単に理解できるようになります。

    今回は、__name__=__main__の意味について理解していきましょう。

    __name__はモジュールを示している

    結論からお伝えすると、__name__は変数で、実行されたファイル(モジュール)の情報が入っています。

    といっても、これだけではイメージがわかないと思いますので、順を追ってみていきましょう。

    __name__を実際に出力してみる

    まずは__name__を実際にコードの中で出力してみましょう。

    以下のコードをみてみます。

    コード
    

    first.py

    print(__name__)

    アウトプット
    

    __main__

    __name__変数を出力するコードです。

    このコードを実行したところ、__main__という出力結果を得ることができました。

    これでもまだ__main__が何かよく分かりません。

    そして、__main__について理解をするためには、__main__以外が出力されるコードを見てみると分かりやすいです。

    ですので、実際に__main__以外が出力されるコードをみていきましょう。

    コード
    

    -first.py

    import second.py

    -second.py

    print(__name__)

    first.pyファイルでは、second.pyファイル(モジュール)を読み込んでいます。

    そして、second.pyファイルの中では、__name__変数が出力されるようになっています。

    この状態で、first.pyファイルを実行するとどうなるでしょうか?

    出力結果はこのようになります。

    アウトプット
    

    second

    はじめの例では、__main__が出力されましたが、今回はsecondが出力されました。

    定義に戻って整理する

    再び__main__の定義に戻りましょう。

    __main__はモジュール(ファイル)を示していると説明しました。

    この定義をあらためて見た上で、イメージで整理をしていきましょう。main変数とname変数

    first.pyファイルを実行すると、__main__が呼び出され、出力されます。

    __name__はfirst.pyのファイルに書かれていますので、__name__はfirstになるはずです。

    しかし、実行したファイル(first.py)と、__name__が呼び出された元のファイルは同じですので、firstではなく__main__が出力されるのです。

    次に、こちらのイメージでみていきましょう。

    mainとモジュール名の関係

    この場合、first.pyファイルを実行すると、import文によってsecond.pyファイルが読み込まれます。

    second.pyファイルは__name__を出力するコードが書かれていますので、__name__が出力されます。

    この時、__name__はsecond.pyファイルに書かれていますので、__name__はsecondになります。

    さらに、first.pyとsecondは別のファイルですので、結果としてsecondがそのまま出力されるのです。

    __name__=__main__のまとめ

    (1) 実行ファイル内では、変数__name__には__main__が入っている。

    (2) 実行ファイルで他のモジュールをimportし、そのモジュール内で__name__が書かれていた場合、__name__にはモジュールの名前が入っている。