基礎固め
今まで、コード書く経験といえば、VBAでちょこっと業務効率化するため、既存コードのミニ改修くらいなもので、0から書くことなかった。
ということで、0から書くための基礎体力作りを始めた。
ここでは、そこで生まれた課題やちょっとした疑問、それらへの回答や解決策を、備忘録として残しておく。
随時追加予定。
if __name__ == '__main__':
よく見るけど、これ何?と思い、ググってみる。
ifの中身は、スクリプトとして実行された時のみ、実行されるらしい。
いや、わからん。
実行の仕方の違い
どうやらこういうこと?
スクリプトとして実行 ↔︎ importで実行
以下のようなスクリプトを作り、実行してみる。
# -*- coding: utf-8 -*-
print('import')
if __name__ == '__main__':
print('スクリプト')
まず、Terminalで実行。
$ python test1.py
import
スクリプト
次に、インタープリタで実行。
$ python
>>> import test1
import
ほう。
自分で作ったクラスなり関数をimportで取ってくるなんてしたことなかったから、とっさに理解できなかった。
以下疑問点。
・そもそも、分解してimportで取ってくることの利点ってなんだろ、改修しやすいとかかな?
・なんのためにこんな仕組み(スクリプトとしてとimport時とで、制御を分けること)があるのか?これは仮説も浮かばん。
__name__って何?__main__って何?
次に引っかかるのがこれ。何これ。
ググった結果・・・
・__name__を使って、モジュール名を取得できる
・スクリプトのメインモジュールは、常に__main__と呼ばれる
ん?
メインモジュールって何?
メインとそれ以外との違いは?
ということで、メインとそれ以外の違いを検証。
以下のようなスクリプトを作成、実行。
# -*- coding: utf-8 -*-
print(__name__)
$ python test2.py
結果は
__main__
次は、上記スクリプトをimportした、以下のようなスクリプト。
# -*- coding: utf-8 -*-
import test2
print(__name__)
実行。
$ python test3.py
結果は
test2
__main__
importしたtest2.pyは、モジュール名が出力された。
どうやら__name__という関数(?)は、自スクリプトが実行されるときは__main__、それ以外はモジュール名を取ってくる、という解釈でいいのか?
使い道がわからん・・・