[Python-Dev] PEP 559 - built-in noop() (original) (raw)
Chris Jerdonek chris.jerdonek at gmail.com
Thu Nov 23 04:42:26 EST 2017
- Previous message (by thread): [Python-Dev] PEP 559 - built-in noop()
- Next message (by thread): [Python-Dev] PEP 559 - built-in noop()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, Nov 22, 2017 at 4:32 PM, Victor Stinner <victor.stinner at gmail.com> wrote:
Aha, contextlib.nullcontext() was just added, cool!
So is this equivalent to--
@contextmanager
def yielding(x):
yield x
I thought we were against adding one-line functions?
--Chris
https://github.com/python/cpython/commit/0784a2e5b174d2dbf7b144d480559e 650c5cf64c https://bugs.python.org/issue10049 Victor 2017-09-09 21:54 GMT+02:00 Victor Stinner <victor.stinner at gmail.com>: > I always wanted this feature (no kidding). > > Would it be possible to add support for the context manager? > > with noop(): ... > > Maybe noop can be an instance of: > > class Noop: > def enter(self, *args, **kw): return self > def exit(self, *args): pass > def call(self, *args, **kw): return self > > Victor > > Le 9 sept. 2017 11:48 AM, "Barry Warsaw" <barry at python.org> a écrit : >> >> I couldn’t resist one more PEP from the Core sprint. I won’t reveal where >> or how this one came to me. >> >> -Barry >> >> PEP: 559 >> Title: Built-in noop() >> Author: Barry Warsaw <barry at python.org> >> Status: Draft >> Type: Standards Track >> Content-Type: text/x-rst >> Created: 2017-09-08 >> Python-Version: 3.7 >> Post-History: 2017-09-09 >> >> >> Abstract >> ======== >> >> This PEP proposes adding a new built-in function called
noop()
which >> does >> nothing but returnNone
. >> >> >> Rationale >> ========= >> >> It is trivial to implement a no-op function in Python. It's so easy in >> fact >> that many people do it many times over and over again. It would be useful >> in >> many cases to have a common built-in function that does nothing. >> >> One use case would be for PEP 553, where you could set the breakpoint >> environment variable to the following in order to effectively disable it:: >> >> $ setenv PYTHONBREAKPOINT=noop >> >> >> Implementation >> ============== >> >> The Python equivalent of thenoop()
function is exactly:: >> >> def noop(*args, **kws): >> return None >> >> The C built-in implementation is available as a pull request. >> >> >> Rejected alternatives >> ===================== >> >>noop()
returns something >> ---------------------------- >> >> YAGNI. >> >> This is rejected because it complicates the semantics. For example, if >> you >> always return both*args
and**kws
, what do you return when none >> of >> those are given? Returning a tuple of((), {})
is kind of ugly, but >> provides consistency. But you might also want to just returnNone
>> since >> that's also conceptually what the function was passed. >> >> Or, what if you pass in exactly one positional argument, e.g.noop(7)
. >> Do >> you return7
or((7,), {})
? And so on. >> >> The author claims that you won't ever need the return value ofnoop()
>> so >> it will always returnNone
. >> >> Coghlin's Dialogs (edited for formatting): >> >> My counterargument to this would bemap(noop, iterable)
, >>sorted(iterable, key=noop)
, etc. (filter
,max
, and >>min
all accept callables that accept a single argument, as do >> many of the itertools operations). >> >> Makingnoop()
a useful default function in those cases just >> needs the definition to be:: >> >> def noop(*args, **kwds): >> return args[0] if args else None >> >> The counterargument to the counterargument is that usingNone
>> as the default in all these cases is going to be faster, since it >> lets the algorithm skip the callback entirely, rather than calling >> it and having it do nothing useful. >> >> >> Copyright >> ========= >> >> This document has been placed in the public domain. >> >> >> .. >> Local Variables: >> mode: indented-text >> indent-tabs-mode: nil >> sentence-end-double-space: t >> fill-column: 70 >> coding: utf-8 >> End: >> >> _>> ________________________ >> Python-Dev mailing list >> Python-Dev at python.org >> https://mail.python.org/mailman/listinfo/python-dev >> Unsubscribe: >> https://mail.python.org/mailman/options/python-dev/ victor.stinner%40gmail.com >> >
Python-Dev mailing list Python-Dev at python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/ chris.jerdonek%40gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20171123/f92fbf31/attachment.html>
- Previous message (by thread): [Python-Dev] PEP 559 - built-in noop()
- Next message (by thread): [Python-Dev] PEP 559 - built-in noop()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]