0
0

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.

Python の __name__ == '__main__' とは何か知りたい

0
Last updated at Posted at 2022-12-04

前書き

Python をコマンドラインから実行するとき、おまじないのように、

if __name__ == '__main__':
    run()

という内容を記載していた。

コマンドラインから直接ファイルを実行した際、 if __name__ == '__main__': のブロック内のコードが実行される。

今回の例でいえば、 run() である。

何をしている?

ファイルがモジュールとして読み込まれた際は実行されず、インタプリタに引数として直接取られたり、標準入力で受け渡されたりした際に実行される処理をここに記載している。

どうやって実現している?

コマンドラインから Python を実行すると、 __name__ というグローバル変数に '__main__' という文字列が格納される。

そのため、 if __name__ == '__main__': の条件に合致し、そのブロック以下のコマンドが実行される。

対して、ファイルがモジュールとして import された際はこの行は実行されない。

なぜ __name__'__main__' が格納されるのか?

ファイルがモジュールとして読み込まれたとき、「__name__」変数には、そのモジュールの名称が格納される。

以下でいうと、b.py の print(__name__) で出力されている「b」である。

$ cat <<'EOF' > a.py
import b
print(__name__)
EOF
$ cat <<'EOF' > b.py
print(__name__)
EOF
$ python a.py

結果

b
__main__

一方、ファイルがモジュールとして読み込まれたのではなく、トップレベルのスクリプトとして読み込まれた場合、「__name__」というグローバル変数に '__main__' という文字列が格納される。

さきほどの結果でいうと、 a.py の print(__name__) で出力されている「__main__」という文字列である。

'__main__' とは?

'__main__' はトップレベルのコードが実行されるスコープの名前です。
https://docs.python.org/ja/3.8/library/__main__.html

Ref

0
0
4

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?