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 sys
and 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?