疑問だった「if __name__ == '__main__':」 について調べてみた
まずは、Pythonの日本語訳のドキュメントを読みます。
まあ、そこがオフィシャルだからここからだよね!ということで
'__main__' はトップレベルのコードが実行されるスコープの名前です。モジュールが、標準入力から読み込まれたとき、スクリプトとして実行されたとき、あるいはインタラクティブプロンプトのとき、__name__ には '__main__' が設定されます。
モジュールは、自身の __name__ をチェックすることでメインスコープで実行されているかどうかを確認できます。これはモジュールがスクリプトとして、あるいはインポートでなく python -m で起動されたときに実行するコードの条件として使用できる一般的なイディオムです。
?????
え?トップレベr?インタなんとか?え、何もわからない・・・
自分の日本語の偏差値が3ぐらいになったかと錯覚したわ。
さすがオフィシャル攻撃力高い。素人には危なすぎるな。
でも蓋をしててもらちが開かないので、少しずつ咀嚼していくことにしよう。
変数「__name__」
どうやらこの変数はPythonを実行したらモジュール名が代入されるらしい。
そして、一部特殊だが直接実行したプログラムについてはモジュール名じゃなくて__main__が代入されるとのこと。
と言うことで以下の二つのプログラムを書いてみた。
「module1.py」 「module2.py」
これで「module1」を実行すると
Yeahと__main__とhello Python!とmodule1 endがでてくるはず。
Yeahとmodule1とmodule1 endとStartと__main__とYesがでてくるはず。
さあ実行してみる。
おー、うまくいった。
で、何に使えるの?
これだよね。結局に何に使うのこれ?ってことですよ。
なんか色々考えたんですが、単体テストと結合テストで振る舞いを変えたいとかそういう時に使えそうですね。単体テスト時のみ変数にある値を入れたいとか。
ちょっとすっきりしたので、備忘録として書いてみました。