Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
__name__ and __main__ behavior
📖 Scenario: Imagine you are creating a Python script that can be used both as a program and as a module imported by other scripts. You want to control what code runs only when the script is executed directly.
🎯 Goal: Build a Python script that defines a function and uses the if __name__ == '__main__' check to run code only when the script is run directly, not when imported.
📋 What You'll Learn
Create a function called greet that prints a greeting message.
Create a variable called message with the value 'Hello from the function!'.
Use the if __name__ == '__main__' statement to call the greet function only when the script is run directly.
Print 'Script is being run directly' inside the if __name__ == '__main__' block.
💡 Why This Matters
🌍 Real World
Many Python scripts are written to be both reusable modules and standalone programs. Using <code>if __name__ == '__main__'</code> helps control code execution depending on how the script is used.
💼 Career
Understanding this concept is essential for writing clean, reusable Python code in software development, automation scripts, and data science projects.
Progress0 / 4 steps
1
Create the greet function and message variable
Create a function called greet that prints the variable message. Also, create a variable called message with the value 'Hello from the function!'.
Python
Hint
Define message first, then define greet() that prints message.
2
Add the if __name__ == '__main__' block
Add the if __name__ == '__main__' statement below the function. Inside this block, print 'Script is being run directly'.
Python
Hint
Use the exact line if __name__ == '__main__': and indent the print statement inside it.
3
Call the greet function inside the if __name__ == '__main__' block
Inside the if __name__ == '__main__' block, call the greet() function after the print statement.
Python
Hint
Simply add greet() indented inside the if __name__ == '__main__' block after the print.
4
Print the output when running the script
Run the script and print the output. The output should show Script is being run directly followed by Hello from the function!.
Python
Hint
Just run the script as is. The output should match exactly.
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]