何をするか
if \_\_name\_\_ == '\_\_main\_\_ ':
とすることで、
出力がどう変わるかを4steps+2stepsで体験しました。
今回は、初心者がよく使う「spyder」などツールで間接的に.pyを実行する際の挙動を示しています。
ターミナルで「$ python XXX.py」と直接実行する場合は、本記事下部の<参考記事>から詳細をご覧ください。
いざ実践
__name__
1. まず、print('Hello!')
する関数をかき、「hello.py」として保存する。
# hello.py
def function():
print('Hello!')
2. 次の新規.pyで「hello.py」をimportしてみる
import hello
hello.function()
# 出力内容
# --------------------
# Hello!
# --------------------
↓
functionが実行されたことがわかる。
3. hello.pyを編集して、 __name__ も一緒に出力してみる
# hello.py
def function():
print('Hello!')
print(' __name__とすると、なんと表示されるのか..!? -->' , __name__)
4.もう一度importを実行してみると...
import hello
hello.function()
# 出力内容
# --------------------
# Hello!
# __name__とすると、なんと表示されるのか..!? --> hello
# --------------------
↓
__name__の部分には、「hello.py」の「hello」が表示された!
結論( __name__ とは )
__name__ にはimportされたモジュール'hello.py'
のモジュール名'hello'
が入っていることが分かった。
__main__
次に、hello.pyを編集して、 __main__ を追加してみる。
# hello.py
def function(name):
print('Hello!',name)
print('ちなみに__name__の中身は-->',__name__)
if __name__ == '__main__':
print('mainの中の関数が実行されるのか..?',function('Sato'))
hello.pyを実行してみる。
import hello
hello.function('Tanaka')
# 出力内容
# --------------------
# Hello! Tanaka
# ちなみに__name__の中身は--> hello
# --------------------
↓
__name__はモジュール'hello.py'
のモジュール名'hello'
のままだった。
そのため、function()内にもかかわらず、if __name__ == '__main__':
の中身(仕込んだ「佐藤」)が実行されなかった。
結論( __main__ とは )
if __name__ == '__main__':
にすることで、__main__以下が実行されないことが分かった。
まとめ
importされた時に、実行させない部分を if __name__ == '__main__':
以下に書く。
※ $ python hello.py など直接呼び出すときは実行されます。