On Thu, Nov 12, 2020 at 9:46 AM Matt Wozniski <godlyg...@gmail.com> wrote:

> Currently, the simplest and most idiomatic way to check whether a module
> was
> run as a script rather than imported is:
>
>     if __name__ == "__main__":
>
> People generally learn this by rote memorization, because users often want
> the
> ability to add testing code or command line interfaces to their modules
> before
> they understand enough about Python's data model to have any idea why this
> works. Understanding what's actually happening requires you to know that:
>
>   1. the script you ask Python to run is technically a module,
>   2. every module has a unique name assigned to it,
>   3. a module's `__name__` global stores this unique import name,
>   4. and "__main__" is a magic name for the initial script's module.
>
> A new (writable) global attribute called `__main__` would simplify this
> case,
> allowing users to simply test
>
>     if __main__:
>
> It would behave as though
>
>     __main__ = (__name__ == "__main__")
>
> is executed in each module's namespace before executing it.
>

As a goal of making it even more obvious what the (new) idiom mans, I would
suggest a variable named __imported__ with the opposite value to what is
proposed.

Thus,

if not __imported__:

would behave the same as the proposed

if __main__:


André




>
> Because this would be writable, I don't see any backwards compatibility
> issues.
> It wouldn't negatively impact any modules that might already be defining
> `__main__` (for example, by doing `import __main__`). They'd simply
> redefine it
> and go on using the `__main__` module as they always have. And a package
> with
> a `__main__.py` does not have a `__main__` attribute.
>
> It would be easier to teach, easier to learn, and easier to memorize, and
> a nice simplification for users at the cost of only very slightly more
> complexity in the data model.
> _______________________________________________
> 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/CUNE3Y2YSQQSTXFITSXKFRVPO6EM2DV7/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
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/YOXLVBWRSIDZQ3SJMZUKT2IZCV5JDKXS/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to