pythonのコードをネットで調べると、色々なサイトで、if __name__ == ‘__main__’ の記載を見ることがあると思います。そもそも「if __name__ == ‘__main__’」って何?いつ使うの?と気になる方はよかったら、本記事を見ていって下さい。
if __name__ == ‘__main__’とは?
Pythonにおいて、if __name__ == '__main__'
は非常に重要なコンストラクトです。このコンストラクトは、Pythonのスクリプトがモジュールとしてインポートされるときと、スクリプトとして直接実行されたときの動作を制御するために使用されます。
Pythonスクリプトは、Pythonインタプリターによって直接実行されることもありますし、他のスクリプトやプログラムからモジュールとしてインポートされることもあります。この違いは、__name__
変数によって表されます。
__name__
変数は、現在のPythonモジュールの名前を格納する特殊な変数です。スクリプトが直接実行される場合、__name__
変数には'__main__'
という文字列が設定されます。一方、スクリプトが別のモジュールからインポートされる場合、__name__
変数にはそのモジュール名が設定されます。
if __name__ == '__main__'
コンストラクトは、スクリプトが直接実行される場合にのみ実行されるコードを指定するために使用されます。これにより、スクリプトが別のモジュールからインポートされた場合には、そのコードブロックが実行されないようにすることができます。
if __name__ == ‘__main__’ の使い方
たとえば、以下のようなスクリプトファイル(sample1.py/sample2.py)があるとします。
print("this is sample1.py")
def some_function():
print("Hello, world!")
if __name__ == '__main__':
print("here is in __name_=\"__main__\"")
some_function()
import sample1
sample1.some_function()
スクリプトを直接実行した場合
スクリプト(sample1.py)を直接実行(python sample1.py
コマンドを実行)した場合、print("this is sample1.py")
、print("here is in name_=\"__main\"")
およびsome_function()
が呼び出されます。その結果、以下のように3つが出力されます。
this is sample1.py
here is in __name_="__main__"
Hello, world!
別スクリプトから呼び出す場合
別スクリプト(sample2.py)からsample1.pyを呼び出す場合、print("this is sample1.py")
、およびsome_function()
が呼び出されます。その結果、以下のように2つが出力されます。
this is sample1.py
Hello, world!
気をつけてほしいこと
上記、2パターンを見て気づいた方もいると思いますが、sample1.py
のprint("this is sample1.py")
はどちらのパターンでも実行されています。
if name == 'main':
や 関数/クラスに含まれていないものはスクリプト実行により、必ず実行されますので、その点は注意してコーディングをして下さい。
まとめ
Pythonのif __name__ == '__main__'
は、スクリプトをモジュールとして利用する際に不要な処理を実行せず、エントリーポイントを明示するための構文です。この条件を使用することで、Pythonスクリプトが他のモジュールからインポートされた場合には実行されず、スクリプトが直接実行された場合にのみ実行されます。また、スクリプトの機能や目的が明確になり、可読性が向上するため、Python開発において非常に重要な役割を持ちます。さらに、この条件の中には、スクリプトの実行時に行う処理や設定などを記述することができるため、スクリプトの修正や再利用が容易になります。