

Reserving main
is definitely more hacky. Try compiling multiple objects with main
defined into a single binary - it won’t go well. This can make a lot of testing libraries rather convoluted, since some want to write their own main
while others want you to write it because require all kinds of macros or whatever.
On the other hand, if __name__ == "__main__"
very gracefully supports having multiple entrypoints in a single module as well as derivative libraries.
There are a lot of other helpful replies in this thread, so I won’t add much, but I did find this reference, which you could read if you have a lot of free time. But I particularly liked reading this summary: