Python main() Function Purpose, Usage, and Examples

main() Function

Unlike many other programming languages, Python doesn't require a main function to start execution. That might sound liberating at first—but it also means structure is your responsibility.

This tutorial will help you understand how and why to use a main() function in Python. Whether you’re writing a script or building a module, learning to organize your code using main() and __name__ == "__main__" is a fundamental skill.

Why Use a main() Function in Python?

Python executes code from top to bottom. If you don’t take care, everything in your script might run immediately when imported elsewhere. To avoid this, we use a main guard pattern:

def main():
    print("Hello from main function!")

if __name__ == "__main__":
    main()

Understanding __name__ == "__main__"

Python assigns a special variable called __name__ to every module. When a script is run directly, __name__ is set to "__main__". But if the same script is imported, __name__ becomes the module's name.

Let's Break That Down:

# file: greet.py

print("This is always printed")

def hello():
    print("Hello!")

if __name__ == "__main__":
    print("This runs only when executed directly")

Now Run This:

import greet
This is always printed

Notice how "This runs only when executed directly" did NOT appear? That’s the power of __name__ == "__main__"—it guards what should only run in standalone mode.

Step-by-Step Guide to Using main()

Step 1: Define the Function

Create a main() function that wraps the core logic of your script.

def main():
    print("Starting the program")
    # Add your core logic here

Step 2: Add the Main Guard

Right at the bottom of your file, add the guard to control script behavior:

if __name__ == "__main__":
    main()

Step 3: Save and Run

Save your script as my_script.py and run it using:

python my_script.py
Starting the program

When to Use main()

  • Scripts: Whenever you’re writing a standalone script, wrap your logic inside main().
  • Modules: If your file might be imported later, using the guard prevents accidental execution.
  • Testing: It allows you to run quick tests when executing the file directly.

Common Mistakes to Avoid

  • Forgetting the Guard: If you don’t use __name__ == "__main__", your code may run unexpectedly during import.
  • Calling main() at the Top: Calling main() before defining it or outside the guard can lead to issues.
  • Naming Conflicts: Avoid naming variables or modules as main.

main() with Arguments

For more advanced Python scripts, especially command-line utilities, you can accept input parameters by using the sys.argv list from the sys module.

import sys

def main():
    print("Arguments passed:", sys.argv)

if __name__ == "__main__":
    main()

How It Works

  • sys.argv is a list that contains the command-line arguments passed to the script.
  • The first element, sys.argv[0], is always the name of the script.
  • Subsequent elements are the actual arguments provided by the user.

Example Usage:

If you run this script from the command line like this:

python my_script.py arg1 arg2

The output would be:

Arguments passed: ['my_script.py', 'arg1', 'arg2']

Why Use This?

This approach allows you to build flexible, CLI-based Python utilities that accept dynamic input from users, such as filenames, configuration flags, or processing options.

Conclusion

While Python doesn’t enforce a main() function like C or Java, learning to use it adds clarity, safety, and professionalism to your scripts. It’s one of those “small things” that sets experienced Python developers apart.

Always ask yourself: Could this code be imported in the future? If yes, then guard it well.