Modules in Python & __name__ Guard
As your Python projects grow, keeping thousands of lines of code in a single file becomes messy and difficult to manage.
A Module is simply a Python file (e.g., calculator.py) containing functions, classes, and variables. By breaking your code into modules, your project remains organized, reusable, and easy to maintain.
1. Creating and Importing a Custom Module
Let us create a simple math helper module.
Step 1: Create calculator.py
# calculator.py
def add(x, y):
return x + y
def subtract(x, y):
return x - y
Step 2: Import into main.py
# main.py
import calculator
result = calculator.add(10, 5)
print("Result:", result) # Output: Result: 15
2. The 3 Ways to Import in Python
| Import Technique | Code Example | When to Use |
|---|---|---|
| Full Import | import math math.sqrt(25) | When you want clear clarity on where functions come from. |
| Specific Import | from math import sqrt sqrt(25) | When you only need 1 or 2 functions and want shorter code. |
Aliasing (as) | import pandas as pd import numpy as np | Standard industry convention for shorter library names. |
# Real-world alias example in Data Science
import math as m
print("Square root of 64 is:", m.sqrt(64)) # Output: 8.0
3. The Crucial if __name__ == "__main__": Guard
Have you ever seen this line at the bottom of Python files?
if __name__ == "__main__":
main()
Why Does It Exist?
When Python runs a file directly (e.g., python calculator.py), it automatically sets a special hidden variable named __name__ to the string "__main__".
However, when another file imports calculator.py (import calculator), Python sets __name__ to "calculator" (the file name).
Real-World Example:
# math_utils.py
def multiply(a, b):
return a * b
# Test code that should ONLY run when executing this file directly:
if __name__ == "__main__":
print("Testing locally:", multiply(4, 5))
If you run python math_utils.py, the test prints.
If another file does import math_utils, the test code will NOT run automatically!
Quick Summary
- Module Concept: Any
.pyfile is a module that can be imported usingimport module_nameorfrom module_name import function_name. - Namespace Isolation: Avoid
from module import *to prevent accidental variable name collisions. if __name__ == "__main__":Pattern: Ensures testing/demo code runs only when the file is executed directly, not when imported.
What's Next?
Let's learn how to isolate project dependencies and avoid package conflicts using Virtual Environments in the next lesson!