Python __name__ と __main__
普段、私たちはよく次のような Python コードを見かけます:
if __name__ == "__main__":
main()
Python では、__name__と__main__モジュールとスクリプトの実行に関連する2つの特別な変数です。
__name__と__main_`__name__` は通常、コードの実行方法を制御するために使用されます。特に、モジュールが独立したスクリプトとして実行できるだけでなく、他のモジュールからインポートされる場合に重要です。
1. __name__ 変数
__name__ 現在のモジュールの名前を表す組み込み変数です。
__name__ その値は、モジュールがどのように使用されるかによって異なります:
モジュールがメインプログラムとして実行される場合:__name__その値は `__main__` に設定されます"__main__"。
モジュールがインポートされる場合:__name__その値はモジュールのファイル名に設定されます(.py拡張子を除く)。
`module.py` というファイルがあるとします:
print(f"模块的 __name__ 值: {__name__}")出力は次のようになります:模块的 __name__ 值: __main__
2. __main__ の意味
__main__現在のモジュールがメインプログラムとして実行されていることを示す特別な文字列です。
__main__通常、`__name__` 変数と一緒に使用され、モジュールがインポートされたのか、独立したスクリプトとして実行されたのかを判断します。
3. 使用if __name__ == "__main__":の一般的なパターン
Python では、モジュールの末尾に次のコードブロックを追加するのが一般的です:
例
# ここのコードは、モジュールがメインプログラムとして実行された場合にのみ実行されます
main()
このパターンにより、モジュールがインポートされたときには特定のコードが実行されず、独立したスクリプトとして実行されたときにのみ、それらのコードが実行されます。
例
`example.py` という名前のモジュールがあるとします:
example.py ファイルモジュール:
print("example モジュールからの挨拶!")
if __name__ == "__main__":
print("このスクリプトは直接実行されています。")
greet()
else:
print("このスクリプトはモジュールとしてインポートされました。")
example.py を直接実行する
example.py を直接実行すると、出力は次のようになります:
该脚本正在直接运行。 来自 example 模块的问候!
この場合、__name__`__name__` の値は `"__main__"` なので、if __name__ == "__main__"そのブロック内のコードが実行されます。
example.py をインポートする
別のスクリプトで example.py をインポートする場合、例えば:
例
import example
example.greet()
出力は次のようになります:
该脚本作为模块被导入。 来自 example 模块的问候!
この場合、__name__`__name__` の値は`"example"`(モジュール名)、なのでif __name__ == "__main__":そのブロック内のコードは実行されません。
まとめ
__name__`__name__` は組み込み変数で、現在のモジュールの名前を表します。モジュールがメインプログラムとして実行される場合、
__name__`__name__` の値は"__main__"。モジュールがインポートされる場合、
__name__`__name__` の値はモジュールのファイル名です。使用することで
if __name__ == "__main__":モジュールがインポートされたときに特定のコードが実行されず、独立したスクリプトとして実行された場合にのみそれらのコードが実行されるように制御できます。