[Python-ideas] A "within" keyword
Nick Coghlan
ncoghlan at gmail.com
Sat Jun 9 01:07:39 EDT 2018
On 9 June 2018 at 14:46, Jelle Zijlstra <jelle.zijlstra at gmail.com> wrote:
>
>
> 2018-06-08 20:27 GMT-07:00 Alex Walters <tritium-list at sdamon.com>:
>
>> Why not...
>>
>> cool_namespace = SomeNamespaceContextManager()
>>
>> with cool_namespace:
>> def foo():
>> pass
>>
>> advantage being it introduces no new keyword. The 'disadvantage' is it
>> would change semantics of the with statement (as would be required to get
>> the names defined in the suite of the context manager)
>>
>> Actually, this is probably doable now. You can get the globals of the
> calling code by doing sys._getframe(), then check which names are added
> while the context manager is active.
>
It's doable without code generation hacks by using class statements instead
of with statements.
The withdrawn PEP 422 shows how to use a custom metaclass to support a
"namespace" keyword argument in the class header that redirects all writes
in the body to the given dict:
https://www.python.org/dev/peps/pep-0422/#new-ways-of-using-classes
https://www.python.org/dev/peps/pep-0422/#extending-a-class even shows how
to further use that to extend existing classes with new attributes.
We're not likely to actively encourage that approach though - while they do
enable some handy things, they also encourage hard to navigate programs
with a lot of "action at a distance" side effects that make it tricky to
reason locally about the code you're currently looking at (if anything,
we've been pushing more in the other direction: encouraging the use of
features like checked type hints to better *enable* reasoning locally about
a piece of code).
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180609/5dabdc00/attachment.html>
More information about the Python-ideas
mailing list