On Sun, Dec 4, 2022 at 11:08 AM Chris Angelico <ros...@gmail.com> wrote:

>
>
> You're not the first to try to use globals() for this, but it means
> that the context manager works ONLY at top-level.
>

 I agree with most criticism of this proposal, although I'll note that the
one place where I'd like something like this is at top level. I often write
something like this at top level:

__part1 = (some calculation)
__part2 = (some other calculation)
THING = combine(__part1, __part2)
__part1 = __part2 = None

If they are large objects and I forget to explictly delete the references,
then they won't be garbage collected. Yes, this trivial example could be
folded into a single line but that makes it much harder to understand what
it's doing. And often those calculations are more complex and can't be
written on one line. I can put that in a function which still leaves the
function in scope:

def __create_thing():
    part1 = (some calculation)
    part2 = (some other calculation)
    return combine(part1, part2)
THING = __create_thing()

If we had a top-level-only local statement, I might use it but note that
it's still clumsy since I have to make THING non-local:

local:
    part1 = (some calculation)
    part2 = (some other calculation)
    nonlocal THING
    THING = combine(part1, part2)

The often-rejected multi-line lambda might be better except those parens at
the end are easy to miss:

THING = (lambda:
    part1 = (some calculation)
    part2 = (some other calculation)
    return combine(part1, part2))()

Looking at all these options, is the cost of adding anything actually worth
the benefit? Probably not.

--- Bruce
_______________________________________________
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/RBVK6DS4JZQ7WMEOYXWIRAVFK3QFTT7K/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to