1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonのmain()ーif文つけるのなぜ?

Posted at

#Pythonの__name__ってなにっ?
if __name__ == "__main__":っていう
Pythonのソースコードによく登場する1行は
「おまじない」とかで片付けられますが
なんの役に立っているのでしょう。

例えば、helloWorld.pyというファイルを作成したとします。

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__" という文字列
になります。

###まとめ

  1. import helloWorldしたhelloWorld.py内部では、
    __name__ =="helloWorld"という文字列になる。

  2. python hello.pyしたhelloWorld.py内部では、
    __name__ == "__main__"という文字列になる。

よってimportしただけで勝手に動かれてしまうことを防ぐことが可能!
というわけです。
う〜ん、Python奥が深い。
いろいろ学ぶ余地がありますね。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?