The __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.
The Basics
In Python, __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__main__
. - 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 __main__
.
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.
Why is __name__
Useful?
You may be wondering why this functionality is useful. Here are a couple of primary reasons:
1. Testing Code
The __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.
Conclusion
The __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.