[Python-Dev] PEP 559 - built-in noop() (original) (raw)
Nick Coghlan ncoghlan at gmail.com
Thu Nov 23 20:17:43 EST 2017
- Previous message (by thread): [Python-Dev] PEP 559 - built-in noop()
- Next message (by thread): [Python-Dev] PEP 565: show DeprecationWarning in __main__ (round 2)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 24 November 2017 at 01:49, Barry Warsaw <barry at python.org> wrote:
On Nov 22, 2017, at 19:32, Victor Stinner <victor.stinner at gmail.com> wrote: > > Aha, contextlib.nullcontext() was just added, cool!
So, if I rewrite PEP 559 in terms of decorators it won’t get rejected?
The conceptual delta between knowing how to call "noop()" and how to write "def noop(): pass" is just a teensy bit smaller than that between knowing how to use:
with nullcontext(value) as var:
...
and how to write:
@contextlib.contextmanager
def nullcontext(enter_result):
yield enter_result
or:
class nullcontext(object):
def __init__(self, enter_result):
self.enter_result = enter_result
def __enter__(self):
return self.enter_result
def __exit__(self, *args):
pass
So the deciding line for me was "Should people need to know how to write their own context managers in order to have access to a null context manager?", and I eventually decided the right answer was "No", since the context management protocol is actually reasonably tricky conceptually, and even the simplest version still requires knowing how to use decorators and generators (as well as knowing which specific decorator to use).
The conceptual step between calling and writing functions is much smaller, and defining your own re-usable functions is a more fundamental Python skill than defining your own context managers.
And while I assume you were mostly joking, the idea of a
"@functools.stub_call(result=None)" decorator to temporarily replace an
otherwise expensive function call could be a genuinely interesting
primitive. unittest.mock
and other testing libraries already have a bunch
of tools along those lines, so the principle at work there would be pattern
extraction based on things people already do for themselves.
Cheers, Nick.
-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20171124/e668e5d6/attachment.html>
- Previous message (by thread): [Python-Dev] PEP 559 - built-in noop()
- Next message (by thread): [Python-Dev] PEP 565: show DeprecationWarning in __main__ (round 2)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]