In Python, the if __name__ == "__main__": construct is used to control code execution when a Python file is run directly versus imported as a module. Here’s a breakdown:
1. What does it do?
- When a Python script is run directly, the special variable
__name__is automatically set to"__main__". - When the script is imported as a module into another script,
__name__is set to the module’s name (e.g.,"my_module").
The code block under if __name__ == "__main__": will only execute if the script is run directly, not when imported.
2. Why use it?
- Avoid unintended execution: Code inside the block won’t run when the file is imported as a module.
- Module testing: Allows you to add test code or demo logic that runs only when the script is executed directly.
- Code organization: Separates reusable functions/classes (outside the block) from execution-specific logic (inside the block).
3. Example
Suppose you have a file example.py:
python
def greet():
print("Hello from the module!")
if __name__ == "__main__":
print("This runs only when the script is executed directly.")
greet()
Case 1: Run directly
bash
python example.py
Output:
This runs only when the script is executed directly.
Hello from the module!
Case 2: Import as a module
python
# another_script.py
import example
example.greet() # Output: "Hello from the module!"
No output from the if __name__ == "__main__": block.
4. Common Use Cases
- Running tests or demos for a module.
- Defining command-line interfaces (CLIs) (e.g., with
argparse). - Initializing resources only when the script is the main program.
Key Takeaway
if __name__ == "__main__":ensures code runs only in direct execution, making scripts modular and reusable.- It’s a Python best practice for organizing code that serves dual purposes (module + executable).