pythonの勉強を進めていく中で必ずぶつかるのは、python特有の書き方です。
その中でもタイトルに書いたコード(if __name__="__main__":)の理解に苦しむ人は多いのではないでしょうか?
この記事では具体例を交えながら、このコードの意味を解読していきます。
ある数値を4乗する関数を例にとります。
まずは以下のコードを参考にしてpython3の仮想環境をデスクトップ上に作ってください。
python3 -m venv xxxxxx
source xxxxxx/bin/activate
次にxxxxxxフォルダの中にfourという名前のモジュールを作ります。
four.py
def four_sample(x):
return x**4
print(four_sample(3))
このfour.pyファイルを保存したら、新しいファイルを作成してください。
以下のコードを打ちます
four2.py
import four
そしてコマンドラインでこのファイルを実行します。
python3 four2.py
すると、81という結果が出力されます。
では次にfour.pyのファイルを以下のように変更してみてください。
four.py
def four_sample(x):
return x**4
if __name__=="__main__":
print(four_sample(3))
そしてfour2.pyを実行します。
python3 four2.py
すると、何も出力されません。
これはなぜでしょうか?
Pythonには __name__という特殊な変数があります。
この変数にはモジュール名が文字列で入っています。
そして、上記の例でいうと、four.pyの中に__name__変数の記述があり、この値はpython3 four.pyと直接コンパイルすると"__main__"と変換され、他のモジュールからimport fourと呼び出される時は"four"と変換されます。
今の例ですとfour2.pyからimport fourの形で呼び出されていますよね。ですので、four.pyの中で__name__=="four"と変換され、if文以下の処理、print(four_sample(3))が実行されなかったわけです。
まとめ
import fourと呼び出す場合:four.pyの内部で__name__に"four"という値が格納される
python3 four.pyと直接コンパイルする場合:four.pyの内部で__name__に"__main__"という値が格納される
if __name__=="__main__":を書くことで得られるメリット:他のファイルからimport fourと関数を呼び出す時、import fourと記述した時点でpythonが勝手に計算して結果を出力することを避けることができる