Bird
Raised Fist0
Pythonprogramming~10 mins

__name__ and __main__ behavior in Python - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

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
Concept Flow - __name__ and __main__ behavior
Python file starts
Set __name__ variable
Check if __name__ == "__main__"
Yes No
Run main code
Program ends
When a Python file runs, it sets __name__. If __name__ is "__main__", it runs the main code block; otherwise, it skips it.
Execution Sample
Python
def greet():
    print("Hello from greet()")

if __name__ == "__main__":
    greet()
This code runs greet() only if the file is run directly, not when imported.
Execution Table
Step__name__ valueCondition (__name__ == "__main__")ActionOutput
1"__main__"TrueCall greet()
2"__main__"TrueInside greet(): print messageHello from greet()
3"__main__"TrueEnd of program
💡 Program ends after running greet() because __name__ == "__main__" is True
Variable Tracker
VariableStartAfter Step 1After Step 2Final
__name__Set by Python"__main__""__main__""__main__"
Key Moments - 2 Insights
Why does the code inside if __name__ == "__main__" run only when the file is run directly?
Because when run directly, Python sets __name__ to "__main__" (see execution_table step 1). When imported, __name__ is the module name, so condition is False and code inside is skipped.
What happens if we import this file in another Python file?
The __name__ variable will be the module's name (not "__main__"), so the condition is False and greet() is not called automatically (see concept_flow No branch).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of __name__ at Step 1?
A"__main__"
B"greet"
C"module"
DUndefined
💡 Hint
Check the __name__ value column in execution_table row 1
At which step does the program print "Hello from greet()"?
AStep 1
BStep 2
CStep 3
DIt never prints
💡 Hint
Look at the Output column in execution_table row 2
If this file is imported, what happens to the condition __name__ == "__main__"?
AIt becomes True and runs greet()
BIt causes an error
CIt becomes False and skips greet()
DIt runs greet() twice
💡 Hint
Refer to key_moments explanation about import behavior
Concept Snapshot
Python sets __name__ to "__main__" when a file runs directly.
Use if __name__ == "__main__": to run code only when file is executed, not imported.
This helps separate reusable code from script code.
When imported, __name__ is the module name, so main code is skipped.
Full Transcript
When you run a Python file, Python sets a special variable called __name__ to "__main__". This means the file is the main program. If you import the file as a module, __name__ is set to the module's name instead. Using the condition if __name__ == "__main__": lets you write code that runs only when the file is run directly, not when imported. In the example, greet() runs only if the file is the main program. This helps keep code organized and 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

  1. Step 1: Understand the role of __name__

    When a Python file runs directly, __name__ is set to the string "__main__".
  2. Step 2: Differentiate direct run vs import

    If the file is imported, __name__ is the module's name, not "__main__".
  3. Final Answer:

    "__main__" -> Option C
  4. 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

  1. Step 1: Check correct variable and string

    The variable is __name__ and the string to compare is "__main__".
  2. Step 2: Verify syntax correctness

    Use double equals == for comparison, and colons to start the block.
  3. Final Answer:

    if __name__ == '__main__': -> Option A
  4. 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

  1. Step 1: Check if condition when run directly

    Since the file runs directly, __name__ == '__main__' is True, so greet() is called.
  2. Step 2: Understand greet() function output

    The function prints "Hello!" once.
  3. Final Answer:

    Hello! -> Option D
  4. 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

  1. Step 1: Check the if condition syntax

    The condition uses single equals (=) which is assignment, not comparison, causing SyntaxError.
  2. Step 2: Confirm function and indentation

    The function main() is defined correctly and indentation is fine.
  3. Final Answer:

    SyntaxError due to single equals (=) in if condition -> Option B
  4. 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

  1. 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.
  2. Step 2: Check what runs in file2.py

    Only print('In file2') runs, so output is just "In file2".
  3. Final Answer:

    In file2 -> Option A
  4. 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