LoginSignup
0
0

#0020 if __name__ == '__main__' とは

Last updated at Posted at 2023-09-09

はじめに

  • エンジニア始めた当初、if __name__ == '__main__' とはなんぞと思っていた。
  • なんとなく、スクリプト実行に実行されるんだな〜という理解だったので、改めて調べてみた。

__name__とは

  • __name__とは属性であり、モジュール名にあたる。
>>> import numpy as np
>>> np.__name__
'numpy'
>>> numnpy.__name__

>>> import time
>>> time.__name__
'time'
  • つまり、if __name__ == '__main__'の条件分岐は__name__属性が__main__であるということ。
  • それはいつなのか?...

if __name__ == '__main__' はスクリプト実行時の条件

  • 結論を言えば、__name__属性が__main__である条件はファイルがスクリプト実行された場合です。
  • モジュール実行時は当てはまりません。
  • 例を見てみます。

スクリプト実行のトライアル

  • test_module.pyを準備し、スクリプトを実行します。
[test_module.py]
def func():
    print(f"__name__ is : {__name__}")

if __name__ == '__main__':
    print("Start : if __name__ == '__main__'")
    func()
❯❯❯ python test_module.py
Start : if __name__ == '__main__'
__name__ is : __main__
  • if __name__ == '__main__'の中でfunc()が実行されました。
  • __name____main__です。

モジュール実行のトライアル

  • 次に、test_module.pyをモジュールとして実行するスクリプト(execyte_test.py)を準備します。
  • execyte_test.pyをスクリプト実行します。
[execyte_test.py]
import test_module

print("~~~ In execute_test.py. ~~~")
print(f"__name__ is : {__name__}")
print()
print('~~~ Call test_module.func() ~~~')
test_module.func()
❯❯❯ python execute_test.py
~~~ In execute_test.py. ~~~
__name__ is : __main__

~~~ Call test_module.func() ~~~
__name__ is : test_module
  • test_module.func()の実行結果から、__name__test_moduleであり、if __name__ == '__main__' の条件分岐に入らないことになります。

まとめ

  • if __name__ == '__main__' このpythonファイルがスクリプト実行された場合というif文
  • __name__属性
    • スクリプト実行 -> __main__
    • モジュール実行 -> <モジュール名>
0
0
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
0
0