機械学習

if __name__=="__main__:"とは?

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が勝手に計算して結果を出力することを避けることができる

-機械学習

Copyright© 起業家のためのプログラミング , 2024 All Rights Reserved Powered by AFFINGER5.