#Pythonの__name__ってなにっ?
if __name__ == "__main__":
っていう
Pythonのソースコードによく登場する1行は
「おまじない」とかで片付けられますが
なんの役に立っているのでしょう。
例えば、helloWorld.py
というファイルを作成したとします。
def main():
print("Hello Python!")
# メイン
main()
先ほどの
if __name__ == "__main__"
の記述はありませんが
$ python helloWorld.py
Hello Python!
という実行結果は得られます。
ただしこの構成の場合、import
した場合でも
>>> import helloWorld # この時点で「Hello Python!」が表示されてしまう
Hello Python!
ということで、単にPythonファイルをインポートして、main関数を再利用しようとしただけなのに実行まで勝手にされてしまうのは困ります。
そこで
def main():
print("Hello Python!")
# main()の前に1行挿入するのだ
if __name__ == "__main__":
main()
このif文の内部は import された際には実行されません。
>>> import helloWorld
>>>
インポートで実行されない理由
- import helloWorldをした場合:
if __name__ == "__main__" の __name__
という変数には
このPythonファイルのモジュール名が文字列で入っています。
つまり
__name__の中身は”helloWorld” という文字列
となっています。
- python helloWorld.pyのようにプログラムを実行した場合:
helloWorld.py の内部の
__name__ 変数は "__main__" という文字列
になります。
###まとめ
-
import helloWorld
したhelloWorld.py
内部では、
__name__
=="helloWorld"
という文字列になる。 -
python hello.py
したhelloWorld.py
内部では、
__name__
=="__main__"
という文字列になる。
よってimport
しただけで勝手に動かれてしまうことを防ぐことが可能!
というわけです。
う〜ん、Python奥が深い。
いろいろ学ぶ余地がありますね。