It helps your Python file know if it is being run directly or being used by another file. This way, you can control what code runs in each case.
You want to test parts of your code by running the file directly.
You want to write reusable code that can be imported without running test code.
You want to organize your program so some code only runs when you start the file.
You want to avoid running certain code when your file is imported by others.
Syntax
Python
if __name__ == "__main__":
# code to run only when file is executed directlyprint("Running directly")
__name__ is a special variable Python sets automatically.
When you run a file directly, __name__ equals "__main__".
Examples
This prints the value of __name__. If run directly, it prints __main__ and the message.
Python
print(__name__)
if __name__ == "__main__":
print("This runs only when executed directly")
If you run mymodule.py directly, it calls greet(). If imported, it does not run greet() automatically.
Python
# file: mymodule.pydef greet():
print("Hello!")
if __name__ == "__main__":
greet()
Sample Program
This program shows the value of __name__. If you run this file directly, it prints the message from main(). If you import it, only the print line runs showing the module name.
Python
def main():
print("This code runs only when the file is executed directly.")
print(f"The __name__ variable is: {__name__}")
if __name__ == "__main__":
main()
OutputSuccess
Important Notes
When imported, __name__ equals the file name (without .py), not __main__.
This behavior helps separate reusable code from test or script code.
Summary
__name__ tells if a file is run directly or imported.
Use if __name__ == "__main__" to run code only when the file is executed directly.
This makes your code cleaner and more reusable.
Practice
(1/5)
1. What does the special variable __name__ contain when a Python file is run directly?
easy
A. The file's directory path
B. The file's extension
C. "__main__"
D. The Python version
Solution
Step 1: Understand the role of __name__
When a Python file runs directly, __name__ is set to the string "__main__".
Step 2: Differentiate direct run vs import
If the file is imported, __name__ is the module's name, not "__main__".
Final Answer:
"__main__" -> Option C
Quick Check:
__name__ = "__main__" when run directly [OK]
Hint: Direct run sets __name__ to "__main__" [OK]
Common Mistakes:
Thinking __name__ holds file path
Confusing __name__ with Python version
Assuming __name__ is always module name
2. Which of the following is the correct syntax to run code only when a Python file is executed directly?
easy
A. if __name__ == '__main__':
B. if __main__ == '__name__':
C. if main == '__name__':
D. if __name__ = '__main__':
Solution
Step 1: Check correct variable and string
The variable is __name__ and the string to compare is "__main__".
Step 2: Verify syntax correctness
Use double equals == for comparison, and colons to start the block.
Final Answer:
if __name__ == '__main__': -> Option A
Quick Check:
Correct syntax uses == and exact names [OK]
Hint: Use if __name__ == '__main__': exactly [OK]
Common Mistakes:
Using single equals (=) instead of double (==)
Swapping __name__ and __main__
Missing colon at end of if statement
3. What will be the output when running this Python file directly?
def greet():
print('Hello!')
if __name__ == '__main__':
greet()
medium
A. Hello! Hello!
B. No output
C. Error: greet() undefined
D. Hello!
Solution
Step 1: Check if condition when run directly
Since the file runs directly, __name__ == '__main__' is True, so greet() is called.
Step 2: Understand greet() function output
The function prints "Hello!" once.
Final Answer:
Hello! -> Option D
Quick Check:
Function called once prints "Hello!" [OK]
Hint: Direct run triggers greet() printing once [OK]
Common Mistakes:
Thinking greet() runs twice
Assuming no output without main guard
Confusing function call with definition
4. Identify the error in this code snippet:
def main():
print('Running main')
if __name__ = '__main__':
main()
medium
A. IndentationError in function definition
B. SyntaxError due to single equals (=) in if condition
C. NameError because main() is undefined
D. No error, code runs fine
Solution
Step 1: Check the if condition syntax
The condition uses single equals (=) which is assignment, not comparison, causing SyntaxError.
Step 2: Confirm function and indentation
The function main() is defined correctly and indentation is fine.
Final Answer:
SyntaxError due to single equals (=) in if condition -> Option B
Quick Check:
Use == for comparison, not = [OK]
Hint: Use == in if condition, not = [OK]
Common Mistakes:
Using = instead of ==
Assuming function undefined error
Ignoring indentation correctness
5. You have two Python files:
# file1.py
def greet():
print('Hi from file1')
if __name__ == '__main__':
greet()
# file2.py
import file1
print('In file2')
What will be the output when you run file2.py?
hard
A. In file2
B. No output
C. Hi from file1
D. Hi from file1
In file2
Solution
Step 1: Understand import behavior with __name__
When file1 is imported, its __name__ is "file1", not "__main__", so greet() inside the if block does NOT run.
Step 2: Check what runs in file2.py
Only print('In file2') runs, so output is just "In file2".
Final Answer:
In file2 -> Option A
Quick Check:
Import skips main block, prints only file2 message [OK]
Hint: Imported file skips if __name__ == '__main__' block [OK]
Common Mistakes:
Assuming greet() runs on import
Expecting both prints always
Confusing __name__ values on import
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.