I was curious if / what sort of proposals have been considered for
simplifying the pattern:

```
def main():
    ...

if  __name__ == "__main__":
    main()
```

I imagine this topic must have come up before, so I'd be interested in any
relevant history.

But unless I'm missing something, it seems like adding some easier
alternative to this cumbersome entrypoint syntax would be worth considering.

My motivation for writing this suggestion is in an attempt to stop a common
anti-pattern, where instead of defining a `main` function (or a function by
any other name) an simply calling that by adding the above two lines, a lot
of Python users I work with will just start dumping their logic into the
global scope of the module.

Needless to say, this can have consequences. If there was some default
builtin, let's call it `__main__` for now (open to suggestions), that took
a function as an argument and conditionally executed it if `__name__ ==
"__main__"` in the caller's scope, that would allow us to simplify the
above boilerplate to a single line with no extra indentation:

```
def main():
    ...

__main__(main)
```

In addition to being simpler, it would allow users to avoid the trap of
adding logic that impacts the global scope. It would also save me some
keystrokes, which I'm always grateful for.

Furthermore, it could be used as a decorator (and the use-case wouldn't be
unreasonable!), and we all know how much new Python users love decorators
when they find out about them.

```
@__main__
def main():
    ...
```

Maybe having such a builtin would discourage globals and help new users get
the use-decorators-everywhere bug out of their system.

--
-Dr. Jon Crall (him)
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/FKQS2NEI5RQMTX53N77KQQDFZ6HZONXU/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to