__name__ variable is a built-in attribute in Python, automatically initialized and assigned for each Python program. It’s one of those concepts that’s simple on the surface but has powerful implications. In this article, we’ll dive into what
__name__ is, how it’s used, and the important role it plays in Python scripting.
__name__ is a special system-defined variable. Python automatically assigns a string to this variable, depending on how you run your script. The assignment of this string works as follows:
- If a script is being run directly: When you’re running your script directly from the command line, Python sets the
__name__variable to have a value of
- If a script is being imported as a module: If your script is being imported into another script as a module, Python sets the
__name__variable to the name of the script/module being imported.
Let’s look at an example for better understanding.
# script.py def hello_world(): return "Hello, World!" if __name__ == "__main__": print(hello_world())
In this script, if you run it directly from the command line with python script.py, Python will execute the
if __name__ == "__main__": block because
__name__ is set to
However, if you were to import this script into another script:
# another_script.py import script print(script.hello_world())
…and run python another_script.py, Python will NOT execute the
if __name__ == "__main__": block in script.py. This is because
__name__ in script.py is no longer __main__ – it’s now script, the name of the module being imported.
You may be wondering why this functionality is useful. Here are a couple of primary reasons:
1. Testing Code
__name__ == "__main__" check allows you to test your Python files. You can add test cases or print statements in this block. These lines will get executed when the file is run directly, but not when it’s imported as a module.
2. Organizing Code
You can also use
__name__ == "__main__" to have a clear entry point for your program, much like the main() function in languages like C++ or Java. Any code you don’t want to run when your file is imported as a module, you can place inside the
if __name__ == "__main__": block.
__name__ variable in Python may seem complex, but it offers a powerful tool for structuring your Python scripts and modules. By understanding
__name__, you can create Python files that behave differently based on whether they’re run directly or imported as modules, enabling cleaner and more organized code.