このサイトは、Pythonや生成AIなどを学べるオンラインプログラミングスクール AI Academy Bootcampが運営しています。
if __name__ == “__main__”:とはなにか
if __name__=="__main__":
が記述ある場合に、「ファイル名.py
」がモジュールとして、他のプログラムから読み込まれ場合に、if __name__=="__main__":
配下の処理を実行させないようにするためのif文だとご理解ください。
(if __name__ == "__main__":
があると、モジュールがPythonスクリプトとして起動された場合(*例えばpython ファイル名.py 等にて実行された場合)のみ、if __name__ == “__main__”: 配下の処理が実行されます。)
厳密には、if __name__ == “__main__”:という記述は、そのPythonファイルが「pythonファイル名.py
」という形で実行されているかどうか」を判定するif文になります。
例えば、sample.py
という以下のコードが書かれたPythonプログラムがある場合を考えます。
def sample_func():
print("sample func")
print(__name__)
sample_func()
この場合、 import sample
として読み込むと以下のように出力されます。
sample func
__sample__
これはPythonでは、インポートされたファイルの中身は実行されるためです。 そのため、単にインポートしただけなのに sample_func()
の処理が実行されてしまいます。
この時、import sample
としてモジュールとして読み込まれた「sample.py」のprint(__name__)の
出力は、ファイル名(モジュール名)の「__sample__」になっていることに注目してください。
モジュールとして読み込まれた場合、__name__
にはモジュール名が格納されるため、今回は「sample.py」なので、__sample__と出力されましたが、モジュール名(ファイル名)が例えば、「test.py」であれば、出力は__test__ と出力されます。
このように、モジュールとして読み込まれた場合に、__name__
には、モジュール名がセットされることを理解しておきましょう。
一方で、「python sample.py」と実行すると以下のようになります。
sample func
__main__
この時、print(__name__)
の出力が、スクリプトとして実行されたため、__main__ になっていることに注目してください。
先ほどでは、モジュールとして読み込まれた時には__name__にはモジュール名でしたが、スクリプトとして実行された場合には、__main__ に変わります。
print(__name__)
の挙動がimportされた時と、pythonコマンドで実行した時の出力結果が違うことを理解しておきましょう。
if __name__ == “__main__”: はいつ使うのか
先ほど説明しました通り、__name__ はモジュールとして読み込まれた時と、スクリプトとして実行された時に格納される値が異なります。この性質を利用することで、スクリプトとして実行された場合にのみ、ある処理を実行したいと言った処理を実現できます。
仮に、if __name__ == “__main__”:の記述がない場合、 import
しただけで、その読み込んだライブラリの処理が実行されるのは面倒なので、 if __name__ == “__main__“:
という一文を書いておくと、特定のライブラリをインポートした時にその内部のプログラムが動かないようにするために記述します。
def sample_func():
print("sample func")
if __name__ == "__main__":
sample_func()
sample.py
の中身が上記であれば、import sample
としても、sample_func()
は実行されません。
またsample.pyを以下のように書き換えてみます。
def sample_func():
print("sample func")
print(__name__) # この行を追加
if __name__ == "__main__":
sample_func()
この状態のsample.pyをモジュールとして読み込んだ場合に、「print(__name__) 」の出力は、「sample」(ファイル名・モジュール名)と出力されることがわかります。
そのため、if __name__=="__main__":
がTrueにならず(条件が成立しないため)、if __name__=="__main__":
配下の処理(つまり6行目のsample_func())が実行されないということになります。
上記のことから、if __name__ == “__main__”:という記述は、そのPythonファイルが「pythonファイル名.py
」という形で実行されているかどうか」を判定するif文になり、加えると__name__が__main__(すなわちメインのスクリプトである場合)を判定しているif文になります。
🎁ちょっとひと息 ! 業務や学習に役立つライブラリーをプレゼント !
オンラインプログラミングスクールのAI Academy Bootcamp LINE公式のライブラリーでは無料動画、講座、最新技術資料など、学習や業務に役立つ秀逸な教材や実践的なリソースを豊富に取り揃えています!毎週新しいコンテンツも更新中です。LINE友だち登録でプレゼントします。ぜひご活用ください!
AI Academy Bootcamp ではAI・データサイエンス、機械学習の実践力を高める全4コース40時間以上の動画が見放題!AIの学習に必須のPythonの学習から始まり、データサイエンス・機械学習など、目的に応じた幅広い分野をカバーしています。