I mean yeah with no context that looks weird A/F, but given a couple details it's fairly self-evident why it be like it do.
Python doesn't need a main function. It'll just start running any top level code. This is nice for beginners learning programming because there's no scaffolding or anything to set up. It just do the thing.
python uses double underscores (usually called "dunder") to mark "special" things. __name__ is a global variable containing the name of the current module. There's a couple more like __file__ containing the filename of the current module.
If you run a file directly __name__ gets set to "__main__". If it got set to something more sensible like "main" you couldn't really call a file main.py without this breaking. Right now this only breaks for files called __main__.py but luck would have it that calling a file __main__.py already has a special meaning which makes these uses not clash.
Sometimes you want code to only run if a module is run but not when it is imported. Checking if __name__ is set to __main__ is the easiest way to do this.
Python for sure has a bunch of weirdness, but it all does mesh together into a rather nice programming language.
Idk, I guess I should ask why python needs a default function? If I'm running it as a script with commandline invocation I just copy and paste the if main namespace thing from stack overflow and it works as I intended. It also works if I invoke via python my_script.py $args, so I don't really see why I should philosophically care about how other languages that I'm not using do it.
I always put all of the code in the main block. Only exception is when I am creating a multithreaded/multiprocessor application. Then I normally use the if statement as the place to setup “the plumbing” with pipes and what not. That way people are forced to realize there is no main function but two co functions working in tandem
I'm gonna repeat what I wrote in another comment. You are comparing the default interpreted way of running pythong to a compiled language. When you compile a python program into a wheel, you define the entry points of the code on it, and they point to functions like main() or whatever you define.
You aren't complaining that a index.js doesn't automatically run the main function when run by node, or that bash doesn't also have a default main function execution. Interpreted languages oriented to scripting won't have the same rules as compiled languages.
programming languages aren't usually cursed, what's cursed is the way some people decide to structure their programs. I've seen some stuff.
It's a common practice but not required. Python behaves like JS where it just runs whatever you wrote. If you don't want it to run when importing the file you can put the main() inside the if so it only runs when you run the actual file.
You can use it when developing a function or a class to run a simple test without running the whole program.