1. ホーム 
  2. 備忘録 
  3. Python

注意事項

__name__と__main__について

モジュールとして読み込むPythonファイルは、使用する関数外に書いてあるコードであっても注意を払うべきである

不要な処理を残してしまっていた場合にどのような問題がおきるか以下で説明する

例えばこのようなファイルを用意しているとする

config.py

def say_twice(message):
    return (message + '!') * 2

# テスト用に書いた不要な処理
print(say_twice('test'))

lesson.py

import config

# hello を2回出力したい
print(config.say_twice('hello'))
# 結果
# test!test!
# hello!hello!

上記の通り、config.py の関数を読み込んで使用するだけのはずが、関数外に書かれたテスト用処理が実行されてしまっている

これはインポート時にファイルの中身を上から下まで一通り読み込むため、その際に暴発するようなコードが書かれていると発生してしまう

テスト用コードを残したいときは __name__ と __main__ を活用して以下のように書き直すと良い

config.py

def say_twice(message):
    return (message + '!') * 2


if __name__ == '__main__':
    # モジュールを作るときにテスト用に記述していた
    print(say_twice('test'))

lesson.py

import config


 # このファイルも他者からインポートされる可能性があるなら
 # __name__と__main__を活用して不要な処理が入らないようにする
def main():
    # hello を2回出力したい
    print(config.say_twice('hello'))
    # 結果
    # hello!hello!


if __name__ == '__main__':
    main()