はじめに
Pythonをやっている人ならこの「おまじない」のようなものをどこかで見たことがあると思います。
今回はこれが実際どんな意味を表しているか、詳しく見ていきたいと思います。
なんのためにあるのか
一言でいうと、このif __name__ == '__main__'
はこのPythonファイルが
$ python ファイル名.py
というように実行されているのかを判定するif文です。
ないと何が困るのか
ためしにif __name__ == '__main__'
のないPythonファイルを作ってみます。
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を少し書き換えます。
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
ちゃんと両方とも期待どおりの結果になり、結果を確認することができました。
おわりに
またひとつ自分の中の疑問が解決されました。
最後まで読んでいただきありがとうございます。