LoginSignup
0
1

対象の読者

Pythonを学習中の方、またはPythonの特殊変数__name__と'__main__'の使い方について理解を深めたい方向けの記事です。

__name__

Pythonのモジュール、関数、クラスはそれぞれ__name__という特別な属性を持っています。モジュールの場合、__name__の値はそのモジュール名(.pyを除いたファイル名)になります。関数やクラスの場合、__name__の値はその関数名やクラス名になります。

example.py
def function():
    pass

class MyClass:
    pass
another_file.py
import example

print("Module name: ", example.__name__)
print("Function name: ", example.function.__name__)
print("Class name: ", example.MyClass.__name__)

このanother_file.pyを実行すると、以下の出力が得られます。

Module name:  example
Function name:  function
Class name:  MyClass

'__main__'

'__main__'は、Pythonファイルがスクリプトとして直接実行されたときに__name__変数に設定される値です。
これはプログラムのエントリーポイントを表します。

example.py
print(__name__)

このexample.pyを直接実行すると、以下の出力が得られます。

__main__

if __name__ == '__main__'

if __name__ == '__main__'という条件式は、ファイルがスクリプトとして直接実行された場合にのみTrueとなります。これにより、ファイルが直接実行されたときだけ実行したいコードをこの条件式の中に記述することができます。ファイルがインポートされた場合、この条件式の中のコードは実行されません。

example.py
def function():
    print("This is a module function")

if __name__ == '__main__':
    print("This is a script")

このexample.pyを直接実行すると、以下の出力が得られます。

This is a script

しかし、別のファイルからexampleをインポートしてfunction()を呼び出すと、"This is a script"は出力されません。

another_file.py
import example

example.function()

このanother_file.pyを実行すると、以下の出力が得られます。

This is a module function

このように、__name__と__main__を使うことで、ファイルがスクリプトとして実行されているのか、他のファイルからインポートされているのかを区別し、それに応じた動作をさせることができます。これは、モジュールを再利用しやすくするためのPythonの便利な機能です。

また、Pythonファイルがモジュールとして実行された場合と直接実行された場合で、__name__変数の値が異なることを利用して、特定のコードをモジュールとして実行された場合だけ、または直接実行された場合だけに実行させることも可能です。

sample.py

if __name__ == "__main__":
    # このコードはファイルが直接実行された場合にのみ実行されます
    print("This file was run directly")
else:
    # このコードはファイルがモジュールとしてインポートされた場合にのみ実行されます
    print("This file was imported as a module")

まとめ

Pythonの特殊変数__name__と'__main__'を理解することで、Pythonのコードをより効率的に再利用することができます。

参考資料

用語の解説

  • モジュール
    Pythonファイルが他のPythonファイルからインポートされて使用される場合、そのファイルはモジュールとして扱われます。
    モジュールは、関数、クラス、変数などを定義し、それらを他のPythonファイルから再利用するためのものです。
    モジュールの名前は、Pythonファイルの名前(.py拡張子を除く)になります。

  • スクリプト
    Pythonファイルが直接実行される場合、そのファイルはスクリプトとして扱われます。
    スクリプトは、一連の命令を含み、それらの命令は上から下へと順番に実行されます。

  • エントリーポイント
    プログラムの実行が始まる場所であり、通常はプログラムの最初に呼び出される関数やコードブロックを指します。
    Pythonにおいて、if __name__ == '__main__'の中のコードがエントリーポイントとなる。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1