2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

__name__や__main__に関する備忘録

Posted at

今回は、プログラム中でよく見かける__name____main__に関して記述していきたいと思います。

開発環境

MacOS
Python3.7(anaconda)
VSCode

Pythonのif name == "main" とは何ですか?への回答

ファイルをimportすると実行までされてしまう問題

言葉で説明するよりも実際にコードを実行して確認する方がわかりやすいと思いますので。

a.py
def hello():
    print('Hello World')

hello() -> Hello World

このコードを実行すると、もちろんHello Worldが出力されます。

そこで、ふとこのhello関数を別のファイルに読み込みたいなと思ったときはファイルaを別のファイル上でimportをすると思います。

b.py
import a -> Hello World

しかし、ここで困ったことに、ファイルaが実行までされてしまうのです。

お分かりでしょうか?
別のファイルにある関数を使って処理をしたいだけなのに、実行までされてしまうので良い迷惑ですよね。

__name__とは

とあるファイルa.pyにおいて、このファイルを実行すると、__main__が出力されます。

a.py

def A():
    print(__name__)

A() -> __main__

つまり、__name__の中は通常であれば、__main__が入力されることになります。

ファイルaをファイルbにimportする

ここで、先ほどと同じようにファイルaファイルbにimportします。
先ほどと同じであれば、ファイルbにimportしただけで、__main__が出力されるということになります。

b.py
import a -> a

しかし、今回出力されるのは、importされたファイル名であるaなのです。

__name__は別のモジュール(ファイル)にimportされたら中身が変わる

通常であれば、__main__が入ってくるというのが__name__でしたが、importされて別のファイル上で実行されるという状況になった場合、__name__の中身は、importされたファイル名(モジュール名)になります。

if __name__ == '__main__':とは何なのか

if __name__ == '__main__':はこの条件文が書かれたファイルが別のファイルにimportされていない場合だけ、条件文以下のコードを実行する、という意味になります。

a.py
def hello():
    print('Hello World')

if __name__ == '__main__':
    hello()


def A():
    print(__name__)

A()

ファイルaファイルbにimportした場合に、if __name__ == '__main__':が無ければ、__name__の中身が__main__ではなく、ファイル名であるaに代わるので、Hello Worldaが出力されます。

b.py
import a -> a

しかし、今回は、ファイルaにif __name__ == '__main__':が記述されており、__name__の中身は__main__ではなくっているため、hello()は実行されず、aのみが出力されました。

まとめ

if __name__ == '__main__':は不思議な条件式のように見えますが、ちゃんと理解すると必要な条件式だなと思いました。

importされたファイルは実行までされるというのがわかっていないと必要性を感じないのではないかと思いました。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?