LoginSignup
9
8

More than 5 years have passed since last update.

[Python] if __name__ == '__main__'の意味するところ

Posted at

はじめに

Pythonをやっている人ならこの「おまじない」のようなものをどこかで見たことがあると思います。

今回はこれが実際どんな意味を表しているか、詳しく見ていきたいと思います。

なんのためにあるのか

一言でいうと、このif __name__ == '__main__'はこのPythonファイルが

$ python ファイル名.py

というように実行されているのかを判定するif文です。

ないと何が困るのか

ためしにif __name__ == '__main__'のないPythonファイルを作ってみます。

hello_world.py
def main():
    print('Hello World!')

main()

これを実行すると当然ですが、

$ python hello_world.py
Hello World!

と表示されます。

しかし・・・

この同じディレクトリでこのPythonファイルをimportしてみると、

$ python
>>> import hello_world
Hello World!

というように「Hello World!」が表示されてしまいます。。

Pythonでは、importされたファイルの中身は実行されてしまうのでこのようなことがおきてしまうのです。

本題

では__name__には何が入っているのでしょうか?

これは特殊な変数で、このPythonファイルのモジュール名が文字列で入っています。

たとえば、import hello_worldとされた場合、hello_world.py内部での__name__hello_worldという文字列になります。

そして、python hello_world.pyとして実行した場合は、__name____main__という文字列になります。

これを実際に確認してみましょう。

先程のhello_world.pyを少し書き換えます。

hello_world.py
def main():
    print('Hello World!')

main()
print(f'__name__: {__name__}')

これを先程と同じように2通りの方法で実行してみましょう。

まず、普通に実行してみます

$ python hello_world.py
Hello World!
__name__: __main__

次に、importして試してみます。

$ python
>>> import hello_world
Hello World!
__name__: hello_world

ちゃんと両方とも期待どおりの結果になり、結果を確認することができました。

おわりに

またひとつ自分の中の疑問が解決されました。

最後まで読んでいただきありがとうございます。

9
8
2

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
9
8