Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Das nennt man Funktion, auch wenn es mit def anfängt.
Und die beiden Dinge nutzt man nicht entweder oder. Sondern zusammen.
Das zweite Idiom mit „__main__“ ist ein Stück Code welches sicherstellt, das alles im eingerückten Block nur ausgeführt wird, wenn man dieses Skript direkt an den Python Interpreter übergeben hat. Also
python meinskript.py
Das unterscheidet sich von einem Import:
import meinskript
In letzterem wird der if-Ausdruck nicht wahr.
Und IN diesem Aussruck ruft man dann main() auf. Denn direkt Code auf Modulebene auszuführen bedeutet globale Daten zu erzeugen. Und das ist eine schlechte Idee.