Preface:
By convention, Python scripts that are run directly and not imported have the line if __name__ == '__main__':. This is to prevent code that should not be executed from running. It can also be used the other way around to only allow code to be run if it is not executed directly, if __name__ != '__main__':
Question:
Are there any benefits/downsides to calling an arbitrarily named "main" function inside the conventional if statement mentioned above? For example:
def main() -> None:
print('Done')
return
if __name__ == '__main__':
main()
Research / Knowledge So Far:
Benefits:
- Easier and cleaner exit of execution
- Can use
return - No longer need to
import sysand usesys.exit(0)
- Can use
- Control scope of variables more easily
- No "shadowed" variable names that would otherwise be found "globally"
- Variables in the "main" function are only seen in the "main" function (due to scope)
- Easier to call the "main" function from another script
Downsides:
- It is not necessary
- It can look more cluttered (more coding involved)
Further Question:
What other benefits and/or downsides are there? Does it make the interpreter do more work if the code is in a function as opposed to not in a function?
Easier to call the "main" function from another script- If you practice this often enough developing packages comes much more natural. But modularity is definitely the biggest thing here, being able to call code from other programs, tie in multiple scripts, etc.if __name__ == '__main__':is. My question was more about the pros and cons of using it.mainfunction and calling it in theif __name__ == "__main__". In fact, as a personal anecdote: I submitted some Python code as part of an interview and one of the critiques I got upon code review was that I did not encapsulate my entrypoint code into amainfunction.