paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

pythonのmain関数についてメモ

Baculaについて残課題はいろいろ残っていますが、いったんバックアップも取れたのでまたほかの事書きたいと思います。

というわけでまたpythonです。


今「Python Programming: An Introduction to Computer Science」という本を読んでいます。
その中にmain関数について説明している部分があったのでメモします。

  • pythonプログラムの実行について

    • 直接実行するもの
    • 他のプログラムからインポートされる
      • ライブラリと呼ばれる
  • これまで(書籍内のサンプルコード)はmain関数を呼び出す行が一番下にあった

こんなの

def main():
    print(’Hello’)

main()
  • Pythonはインポートプロセス中にモジュールの行を評価する
  • 一般にモジュールをimportする際はモジュールを実行させないほうが良い
  • インポートされたか、直接実行できるプログラムでは一番下のmainへの呼び出しを条件付きにする必要がある
if __name__=='__main__':
    main()
  • モジュールがインポートされるたびに、pythonはimportされたモジュールの名前にnameという名前のモジュール内の特別な変数を設定する。
>>> import math
>>> 
>>> math.__name__
'math'
>>> 
>>> __name__
'__main__'
  • mathをimportするとname変数にmathが割り当てられている
  • pythonコードが直接実行(not import)されている場合、pythonはnameの値をmainに設定する

つまりこの記載となっているモジュールをインポートしてもname変数がmainでないため、処理が実行されないということですね。
余計な動きをさせないようにってことでいいのかな?

いろんなブログとかでこの表記が出てきていまいちわからなかったけどなんとなく動きが理解できました。
name変数が何者なのかも調べたいな。