しぷぜん

しぷぜん

素人プログラマなおいがStep Zero to Oneしていくブログ

疑問だった「if __name__ == '__main__':」 について調べてみた

にほんブログ村 IT技術ブログ Pythonへ

まずは、Pythonの日本語訳のドキュメントを読みます。

まあ、そこがオフィシャルだからここからだよね!ということで

'__main__' はトップレベルのコードが実行されるスコープの名前です。モジュールが、標準入力から読み込まれたとき、スクリプトとして実行されたとき、あるいはインタラクティブプロンプトのとき、__name__ には '__main__' が設定されます。

モジュールは、自身の __name__ をチェックすることでメインスコープで実行されているかどうかを確認できます。これはモジュールがスクリプトとして、あるいはインポートでなく python -m で起動されたときに実行するコードの条件として使用できる一般的なイディオムです。

 

?????

 

え?トップレベr?インタなんとか?え、何もわからない・・・

自分の日本語の偏差値が3ぐらいになったかと錯覚したわ。

さすがオフィシャル攻撃力高い。素人には危なすぎるな。

 

でも蓋をしててもらちが開かないので、少しずつ咀嚼していくことにしよう。

 

変数「__name__」

どうやらこの変数はPythonを実行したらモジュール名が代入されるらしい。

そして、一部特殊だが直接実行したプログラムについてはモジュール名じゃなくて__main__が代入されるとのこと。

 

と言うことで以下の二つのプログラムを書いてみた。

 

「module1.py」             「module2.py」

f:id:ct-innovation01:20171004093236p:plain    f:id:ct-innovation01:20171004093221p:plain

    

これで「module1」を実行すると

Yeahと__main__とhello Python!とmodule1 endがでてくるはず。

 

これで「module2」を実行すると

Yeahとmodule1とmodule1 endとStartと__main__とYesがでてくるはず。

 

さあ実行してみる。

f:id:ct-innovation01:20171004093548p:plain

おー、うまくいった。

 

で、何に使えるの?

これだよね。結局に何に使うのこれ?ってことですよ。

 

なんか色々考えたんですが、単体テスト結合テストで振る舞いを変えたいとかそういう時に使えそうですね。単体テスト時のみ変数にある値を入れたいとか。

 

ちょっとすっきりしたので、備忘録として書いてみました。