On Sat, Sep 9, 2017 at 10:54 PM, Victor Stinner <victor.stinner@gmail.com> wrote:
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



​This worries me. Clearly, assuming a None-coercing noop, we must have:

noop(foo) is None
noop[foo] is None
noop * ​foo is None
foo * noop is None
noop + foo is None
foo + noop is None
noop - noop is None
...
noop / 0 is None
...
(noop == None) is None

which can all sort of be implicitly extrapolated to be in the PEP.

But how are you planning to implement:

(noop is None) is None
(obj in noop) is None
(noop in obj) is None

or 

(None or noop) is None
(None and noop) is None 

and finally:

foo(noop) is None

?

Sooner or later, someone will need all these features, and the PEP does not seem to address the issue in any way.

-- Koos


 
Victor

Le 9 sept. 2017 11:48 AM, "Barry Warsaw" <barry@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@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 return ``None``.


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 the ``noop()`` 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 return ``None`` 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 return ``7`` or ``((7,), {})``?  And so on.

The author claims that you won't ever need the return value of ``noop()`` so
it will always return ``None``.

Coghlin's Dialogs (edited for formatting):

    My counterargument to this would be ``map(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).

    Making ``noop()`` 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 using ``None``
    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@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@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: https://mail.python.org/mailman/options/python-dev/k7hoven%40gmail.com




--
+ Koos Zevenhoven + http://twitter.com/k7hoven +