Python
 Computer >> コンピューター >  >> プログラミング >> Python

【初心者向け】Pythonの if __name__ == "__main__" の意味と使い方を徹底解説

Pythonインタープリターがソースファイルを読み込むと、そのファイル内に書かれたすべてのコードが実行されます。

特殊変数 __name__ の正体

コードを実行する前に、Pythonはいくつかの特殊な変数を定義します。その一つが __name__ です。

  • Pythonインタープリターがそのモジュール(ソースファイル)をメインプログラムとして直接実行している場合、__name__ には "__main__" という値が設定されます。
  • 逆に、そのファイルが別のモジュールからインポートされた場合には、__name__ にはモジュール名が設定されます。

なぜこのチェックが必要なのか?

この仕組みが役立つ理由は、開発者が書くモジュール(.pyファイル)には、次の2つの使い方が考えられるからです。

  1. 直接実行してプログラムとして動かす
  2. 別のモジュールにインポートして、関数やクラスを再利用する

if __name__ == "__main__": のチェックを入れておけば、「モジュールをプログラムとして実行するときだけ」特定のコード(テスト処理やデモなど)を実行でき、単に関数を使いたいだけの人がモジュールをインポートしたときには余計な処理が走らないようにできます。

具体例:one.py と two.py で動作を確認しよう

ここでは2つのファイル one.pytwo.py を用意して、実際の動作を見てみましょう。

one.py

def func():
    print("func() in one.py")

print("Root of one.py")

if __name__ == "__main__":
    print("one.py is being run directly")
else:
    print("one.py is being imported")

two.py

import one

print("Root of two.py")

one.func()

if __name__ == "__main__":
    print("two.py is being run directly")
else:
    print("two.py is being imported")

one.py を直接実行した場合

$ python one.py

出力結果:

Root of one.py
one.py is being run directly

one.py はメインプログラムとして実行されているため、__name__"__main__" になり、if文の中の処理が実行されています。

two.py を実行した場合(one.py をインポート)

$ python two.py

出力結果:

Root of one.py
one.py is being imported
Root of two.py
func() in one.py
two.py is being run directly

このとき、one.pyインポートされたため、__name__ の値は "one"(モジュール名)になります。その結果、「one.py is being run directly」ではなく「one.py is being imported」が出力され、if文の中のコードはスキップされます。

まとめ

  • __name__ は、ファイルが直接実行されたかインポートされたかを判別できる特殊変数。
  • if __name__ == "__main__": を使えば、スクリプトとして実行したときのみ動かしたい処理(テスト・デモ・CLI処理など)を分離できる。
  • モジュールを再利用しやすくするための、Pythonにおける重要な定番イディオム。
  1. Pythonの「%」演算子とは?文字列フォーマットの基本と使い方を解説

    Pythonの「%」演算子の役割 Pythonにおける「%(パーセント)」は、文字列フォーマット演算子(補間演算子)として機能します。「format % values」という形式で記述すると、フォーマット文字列内の変換指定子が、values側の要素によって置き換えられます。この仕組みは、C言語のsprintf()関数とよく似ています。 基本的な使い方:文字列の埋め込み 最もシンプルな例は、文字列の中に変数の値を埋め込むケースです。 >>> lang = Python >>> print %s is awesome! % lang Python is awe

  2. Pythonの文字列リテラルの先頭に付く「b」とは?意味と役割をわかりやすく解説

    「b」プレフィックスの基本的な意味Pythonで文字列リテラルの先頭に付ける「b」または「B」は、そのリテラルがバイト列(bytes型)であることを示すプレフィックスです。この記号の挙動は、Python 2とPython 3で大きく異なるため、注意が必要です。Python 2での扱いPython 2では、「b」や「B」のプレフィックスは単純に無視されます。Python 2では通常の文字列リテラル自体がバイト列として扱われるため、「b」を付けても付けなくても動作に違いはありません。Python 3での扱い一方、Python 3ではバイト列リテラルには必ず「b」または「B」を前置します。「b」を付