コードを見ているとたまに見かける__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__はモジュール(ファイル)を示していると説明しました。
この定義をあらためて見た上で、イメージで整理をしていきましょう。
first.pyファイルを実行すると、__main__が呼び出され、出力されます。
__name__はfirst.pyのファイルに書かれていますので、__name__はfirstになるはずです。
しかし、実行したファイル(first.py)と、__name__が呼び出された元のファイルは同じですので、firstではなく__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__にはモジュールの名前が入っている。