何をするか
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 など直接呼び出すときは実行されます。