1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

「数億規模スタートアップのCTO講師」と「エンジニアキャリア専門のポテパン」が贈る、実践型Rubyスクール。

【Python入門】モジュールを扱う際に重要な「if __name__ == ‘__main__’:」とは?

【Python入門】
Pocket

Pythonの勉強をしていてサンプルのプログラムなどを見ていると、「if __name__ == ‘__main__’:」という1文をよく目にすることがあります。mainというとC言語やJavaといった他のプログラミング言語ではプログラムを書く上で欠かせないものですが、Pythonの場合は普段コーディングをする際にはmainは使いません。

しかし、この一文はPythonでモジュールを扱う上で重要な役割を果たします。今回は、この「if __name__ == ‘__main__’:」というものが何を意味するのかについて説明します。

モジュールとは

Pythonのコードはスクリプトファイルとして保存し、他のプログラムから再利用することができます。そのファイルのことをモジュールといいます。Pythonで標準ライブラリを読み込む際に「import」を使いますが、自作したモジュールもimportを使って読み込むことで、そのモジュールで定義した関数やクラスを他のプログラムでも使うことができます。

if __name__ == ‘__main__’:の意味

name__とは?

モジュールの意味がわかったところで、次は「__name__」という変数について説明します。例として、以下のようなプログラムtest.pyがあるとします。

このプログラムを実行した結果は以下の通りになります。

Hello World!

この例では「Hello World!」と表示するtestという関数を定義しただけです。どこにも「__name__」という変数は宣言していません。にもかかわらず、test()が実行されているということは、if文がTrueを返しているということになります。いったい、どういうことでしょうか?

最初にこの「__name__」という変数について見ていきましょう。実はこの__name__という変数はPythonプリンタでPythonスクリプトを読み込むと自動的に作成されます。さらに、この中には実行しているスクリプトのモジュール名が自動的に代入されるようになっています。

if __name__ == ‘__main__’: の意味

__name__という変数が自動で作られ、さらに実行しているスクリプトのモジュール名が自動的に代入されることが分かりました。しかし、__main__というモジュールを作った覚えもありません。この__main__はどこからきているのでしょうか?

実は、Pythonスクリプトを直接実行した時には、そのスクリプトファイルは「__main__」という名前のモジュールとして認識されます。そのため、スクリプトファイルを直接実行すると__name__変数の中に自動で__main__という値が代入されるのです。

つまり、「if __name__ == ‘__main__’:」の意味は、「直接実行された場合のみ実行し、それ以外の場合は実行しない」という意味だったのです。さきほどの例では、test.pyを直接実行したので、if文がTrueを返し、test()が実行されたのです。

試しに、test.pyの中に実行したモジュール名を表示する処理を加えました。

これを実行すると、以下のような結果になります。

Hello World!
モジュール名:__main__

スクリプトファイルを直接実行した際にはモジュール名が「__main__」になっているのが分かりますね。

では、「直接実行された場合以外」とはどういった時のことでしょうか?それは、このスクリプトファイルをモジュールとして他のプログラムから読み込んだときです。test.pyをモジュールとしてimportするtest2.pyを作成しました。

実行結果

モジュール名:test

test.pyをインポートして実行すると、モジュール名が「test」になっているのが分かります。つまり、test.pyがtestモジュールとして実行されているので、__name__には「test」が代入されています。そのため、「if __name__ == ‘__main__’:」はFalseを返すので、test()が実行されなかったのです。

「if __name__ == ‘__main__’:」はモジュールを作成中のテストや、現在はモジュール化するつもりはないが、モジュール化したときに無駄な処理を行わないようにしたい場合などに使われます。個人でプログラムを作っているうちはあまりモジュール化や再利用といったことは考えないかもしれませんが、大規模なプログラムを作る場合には必須の考え方です。ぜひ、覚えておきましょう。

【おすすめ記事】
Pythonを学びたい方は必見!おすすめスクールまとめ5選
【無料で使える】Pythonを勉強できる学習サイト7つ
Pythonの本・参考書の評判
【Python入門】if 文での真偽判定の仕方(TrueとNone)
【Python入門】if文を使った条件分岐の書き方

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

初心者がプログラミングで挫折しない学習方法を無料動画で公開中。オンラインに特化したプログラミングスクール「TechAcademy(テックアカデミー)」が解説。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る