Python is a modular language which lets you implement different modules and code logic in multiple files. Logical division of your code into multiple files not only leads to a cleaner code but also improves code reusability.
In Python, you can execute the code in a Python file by directly running the file from a terminal or command line, or you can import the file from another file and then call the functionalities of the imported file in a new file. Because of that flexibility, you can define different code logic for when a file is run directly versus when it’s imported by another file. But how can you do that? The answer lies in the __name__
variable which is a default Python variable. In this article, you’ll see how if __name__ == '__main__'
can help you implement different code logic depending on whether a Python file is run directly or imported by another file.
What is the __name__
Variable in Python
The __name__
variable in Python is a default Python variable. You can tell by the leading and trailing double underscores. When a Python file is executed directly, the __name__
variable is assigned a value __main__
. In case the script in a file is run by importing the file in another file, the __name__
variable is not initialized and the value __main__
is not assigned to the __name__
variable. The statement if __name__ == 'main'
returns true if the file is run directly, otherwise it returns false. Let’s see this with an example.
Running a Python File Directly
Create a Python file named file_one.py. The contents of the file should look like this:
print("This is file one")
def myfunc():
print("This is a function in file 1")
if __name__ == '__main__':
# these lines execute if the file is directly
print("File one was run directly")
myfunc()
else:
# this line executes if the file is imported in another file
print("File one is imported in another file")
The logical in this file is pretty simple. The Python script file, file_one.py, prints a string to the console. The file contains a function if __name__ == 'main'
. If the condition returns true you print a string and then call the
If you run the file_one.py from a terminal, you will see the following output:
Output:
This is file one
File one was run directly
This is a function in file 1
In the output you see the string “This is file one”. Next, since file_one.py is run directly, the if __name__ == 'main'
condition returns true, and the statement “File one was run directly” is printed along with the output of the function
Code More, Distract Less: Support Our Ad-Free Site
You might have noticed we removed ads from our site - we hope this enhances your learning experience. To help sustain this, please take a look at our Python Developer Kit and our comprehensive cheat sheets. Each purchase directly supports this site, ensuring we can continue to offer you quality, distraction-free tutorials.
Importing and Running a Python File script
Lets now execute the script of file_one.py by importing it from another Python script file. To do that, create another file named file_two.py in the same directory as file_one.py. The script inside file_two.py should look like this.:
# importing the file_one.py
import file_one
print("This is file two")
file_one.myfunc()
if __name__ == '__main__':
# these line execute if the file is directly
print("File two was run directly")
else:
# this line executes if the file is imported in another file
print("File two is imported in another file")
Notice at the beginning of file_two.py, you import the script from file file_one.py. Next, you simply print a string on the console, followed by a function call to if __name__ == 'main'
, and you print a message accordingly.
When you run file_two.py, you’ll get this output:
Output:
This is file one
File one is imported in another file
This is file two
This is a function in file 1
File two was run directly
Let’s take a minute to help you understand why you get the messages above.
Since you import file_one.py at the beginning of file_two.py, the entire script from file_one.py executes first. You can see the string message “This is file one” prints before anything else. This is the first line of the file file_one.py.
Next, the if __name__ == 'main'
condition that sits inside file_one.py executes, but now since file_one.py was not run directly, the condition if __name__ == 'main'
returns false and you see the string “File one is imported in another file” in the output.
After that the script from file_two.py starts executing and you see the string “This is file two”. In the next line the
Finally, the condition if __name__ == 'main'
inside file_two.py is executed. Since the file_two.py is being executed directly, the condition returns true and you see the string “The file is run directly” on the console.
That’s quite literally all you need to know about the expression if __name__ == 'main'
. It’s a very common expression you’ll see in a lot of Python scripts, so it was worth having its own dedicated tutorial. I hope you enjoyed this lesson designed to help you learn how to run different commands based on whether your script was called directly or whether it was imported from a different script. If you found it helpful, please subscribe using the form below!
Code More, Distract Less: Support Our Ad-Free Site
You might have noticed we removed ads from our site - we hope this enhances your learning experience. To help sustain this, please take a look at our Python Developer Kit and our comprehensive cheat sheets. Each purchase directly supports this site, ensuring we can continue to offer you quality, distraction-free tutorials.