What does the if __name__ ==

This article explains what the Python expression if __name__ == '__main__' means and how it's used to control code execution.

A Python program uses the condition if __name__ == '__main__' to run specific code only when the program is executed directly by the Python interpreter. The code inside the if statement is not executed when the file is imported as a module.

Understanding the __name__ Variable

The variable __name__ is a special built?in variable in Python. Python has many special variables that begin and end with double underscores, called "dunder" variables (from Double Underscores). In this case, __name__ is pronounced "dunder name."

Let's examine the value of __name__ in different contexts ?

# When running Python interactively
print(__name__)
__main__

When we import a module, the __name__ variable takes the module's name ?

import random
print(random.__name__)
random

How __name__ Changes Based on Execution

Let's create a simple example to see how __name__ behaves. Create a file called example.py ?

print("__name__ value is {}".format(__name__))

When we run this file directly, __name__ equals __main__ ?

$ python example.py 
__name__ value is __main__

But when we import the file as a module, __name__ equals the module name ?

>>> import example
__name__ value is example

The Problem: Unwanted Code Execution

Consider this Python file with three functions ?

def step1():
    print("Executing the first step...")

def step2():
    print("Executing the second step...")

def step3():
    print("Executing the third step...")

# These lines execute immediately
step1()
step2()
step3()
Executing the first step...
Executing the second step...
Executing the third step...

The issue arises when we try to import this file to use just one function. All three functions execute automatically during import, which is usually not desired.

The Solution: Using if __name__ == '__main__'

We can prevent unwanted execution by checking if __name__ equals '__main__' ?

def step1():
    print("Executing the first step...")

def step2():
    print("Executing the second step...")

def step3():
    print("Executing the third step...")

if __name__ == "__main__":
    step1()
    step2()
    step3()
Executing the first step...
Executing the second step...
Executing the third step...

Now when this file is imported as a module, the three functions are not automatically executed. Only the function definitions are loaded, and we can call individual functions as needed.

Best Practice: Using a main() Function

Following conventions from other programming languages like Java and C, it's common to define a main() function that contains the program's entry point ?

def step1():
    print("Executing the first step...")

def step2():
    print("Executing the second step...")

def step3():
    print("Executing the third step...")

def main():
    step1()
    step2()
    step3()

if __name__ == "__main__":
    main()
Executing the first step...
Executing the second step...
Executing the third step...

This approach improves code readability and follows widely?recognized programming conventions.

Handling Command Line Arguments

We can also handle command line arguments within the if __name__ == '__main__' block using the sys module ?

import sys

def main(args):
    print(f"Arguments: {args}")
    print(f"Type: {type(args)}")

if __name__ == "__main__":
    main(sys.argv)
Arguments: ['main.py']
Type: <class 'list'>

Here's a practical example that multiplies two command line arguments ?

import sys

def multiply(a, b):
    return int(a) * int(b)

if __name__ == "__main__":
    if len(sys.argv) >= 3:
        arg1, arg2 = sys.argv[1:3]
        result = multiply(arg1, arg2)
        print(result)
    else:
        print("Please provide two numbers as arguments")

Running this with command line arguments ?

$ python multiply.py 4 5
20

Conclusion

The if __name__ == '__main__' pattern allows Python scripts to function both as importable modules and standalone programs. This prevents unwanted code execution during imports and follows programming best practices for creating reusable, modular code.

Updated on: 2026-03-24T17:15:44+05:30

83K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements