【基本】よく目にするけど分からない?Pythonの__name__と__main__を簡単に解説!

2022-08-06

Pocket

こんにちは、爽です。皆さん、いかがお過ごしでしょうか?

今回はPythonの__name__と__main__について簡単に確認します。
Pythonを読んでる時に、__name__と__main__という奇妙なワードを目にしたことはありませんか?実際に私も初めて見た時は混乱した記憶があります。おそらくPython独自の書き方だと思います。(ちゃんと調べてないので違ったらすみません。。)
この記事ではそんな上記のキーワードについて簡単に説明したいと思います。

■この記事の対象読者
・Python
の__name__と__main__が何か分からない方

なお、私はPythonをAnacondaをインストールしてJupyterで実行しています。MacのAnacondaのインストール方法とJupyterの使い方は下記記事にまとめているので良かったらご参考ください。

それではどうぞ!

__name__と__main__

__name__とは当該ファイルのファイル名を表示できるPythonの組み込みオブジェクトです。
一方で__main__とはPythonファイルを呼び出すときのコマンドであるPython(Jupyterでは%run)ファイル名.pyで呼び出されたファイルのことを指します。Jupyterでは1番最初にプログラムを起動したファイルのことです。
例えばJupyterでtest1.ipynbファイルに下記のように記述して実行すると、そのファイルは__main__ですと出力されます。

print('test1:', __name__)

#>test1: __main__

次に同じディレクトリにtest2.pyを作って、下記のように記述します。

print('test2:', __name__)


そして最初に作成したtest1.ipynbでtest2.pyをimportすると下記のように出力されるかと思います。

import test2

print('test1:', __name__)

#>test2: test2
#>test1: __main__

この結果からtest1.ipynbが__main__であるということが分かりました。
ところが、test2をimportした際に、test2に書かれたプログラムも実行されてしまいましたが、Pythonで用意されているパッケージ(例えばpandasとかnumpyとか)をimportするときはこのような事象は発生しませんね。

実はPythonでは、test2.pyのようにプログラムを生の状態で書いておいてしまうと、他のモジュールからimportされた際に生の状態のプログラムが実行されてしまいます。
従って、このような事象を防ぐために、__name__と__main__が使われます。
具体的には、if __name__ == '__main__’:と記述することで、「他のモジュールから実行された場合には実行しないでください」とPythonに命令することができます。

if __name__ == '__main__':
    print('test2:', __name__)

また、__main__を想定しているPythonファイルも将来的には他のモジュールから呼び出される可能性もありますので、main()という関数を定義し、if __name__ == '__main__’:の場合のみmain()関数を実行するという書き方が一般的のようです。

import test2

def main():
    print('test1:', __name__)

if __name__ == '__main__':
    main()

#test2.pyのプログラムが実行されなくなった
#>test1: __main__

従って基本的にアプリケーション開発の際は、if name == '__main__’:と書いて他のモジュールから実行されることを防ぐようにしましょう。

参考資料

この記事はUdemyのPython+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~という講座と現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルという2つの講座を参考にさせていただき、作成しました。

Python+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~

Udemyより抜粋

当講座は最低限のWeb開発の知識を知っていることが前提とはなりますが、とにかくPythonの説明とFlask開発の為の説明が充実しているのでおすすめです。
28時間に及ぶ長丁場の講座にはなりますが、絶対に聞く価値がある講座です。
これをマスターすればPythonでどんなアプリケーションでも作ることができると思います。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

とにかく説明が充実している

Webアプリ開発におけるフレームワークがなぜ有益なのか知ることができる

セキュリティ対策、Ajaxなどの技術も知れる

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

画像に alt 属性が指定されていません。ファイル名: a1ee3d048d6aa860662b6f58c4aa167f-1024x328.png

当講座はPythonの基礎から応用まで幅広く学べる講座なのでおすすめです。
この講座の講師はとにかくPythonについての知識が豊富ですし、話も適度な速さで聞き取りやすいです。さすがのシリコンバレーです。
また、最後の方に機械学習で使うライブラリについても解説があるので、データサイエンス・AIについても多少知ることができます。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

シリコンバレーで働いているということもあり、講師のPythonの知識が豊富

話も適度な速さで聞き取りやすい

コードの意味だけでなく、それをどう応用するかまで解説してくれる

なお、Udemyについては以下の記事でまとめていますのでご参考ください。

まとめ

ということで、今回はPythonの__name__と__main__について解説しました。
よく見るけど何なのか分からない__main__と__name__のことをなんとなく分かり、その重要性についても理解していただけたのではないでしょうか。
また、アプリケーション開発をする上でも知っておかないと恥ずかしい知識かと思われますので是非覚えておきましょう!
では、今回はここまでとさせていただきます。