Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 559 – Eingebaute noop()

Autor:
Barry Warsaw <barry at python.org>
Status:
Abgelehnt
Typ:
Standards Track
Erstellt:
08-Sep-2017
Python-Version:
3.7
Post-History:
09-Sep-2017
Resolution:
Python-Dev Nachricht

Inhaltsverzeichnis

Zusammenfassung

Dieser PEP schlägt die Hinzufügung einer neuen eingebauten Funktion namens noop() vor, die nichts tut, außer None zurückzugeben.

Begründung

Es ist trivial, eine No-Op-Funktion in Python zu implementieren. Sie ist sogar so einfach, dass viele Leute sie immer wieder implementieren. Es wäre in vielen Fällen nützlich, eine gemeinsame eingebaute Funktion zu haben, die nichts tut.

Ein Anwendungsfall wäre für PEP 553, wo Sie die Umgebungsvariable breakpoint wie folgt setzen könnten, um sie effektiv zu deaktivieren

$ setenv PYTHONBREAKPOINT=noop

Implementierung

Das Python-Äquivalent der Funktion noop() ist genau

def noop(*args, **kws):
    return None

Die eingebaute C-Implementierung ist als Pull-Request verfügbar [1].

Abgelehnte Alternativen

noop() gibt etwas zurück

YAGNI.

Dies wird abgelehnt, da es die Semantik verkompliziert. Wenn Sie beispielsweise immer sowohl *args als auch **kws zurückgeben, was geben Sie zurück, wenn keines davon gegeben ist? Ein Tupel von ((), {}) zurückzugeben ist etwas hässlich, bietet aber Konsistenz. Aber Sie möchten vielleicht auch nur None zurückgeben, da dies konzeptionell auch das ist, was die Funktion übergeben wurde.

Oder was ist, wenn Sie genau ein Positionsargument übergeben, z. B. noop(7). Geben Sie 7 oder ((7,), {}) zurück? Und so weiter.

Der Autor behauptet, dass Sie den Rückgabewert von noop() niemals benötigen werden, daher wird er immer None zurückgeben.

Coghlan’s Dialogs (formatiert)

Mein Gegenargument dazu wäre map(noop, iterable), sorted(iterable, key=noop) usw. (filter, max und min akzeptieren alle Callables, die ein einzelnes Argument akzeptieren, ebenso wie viele der itertools-Operationen).

Damit noop() in diesen Fällen eine nützliche Standardfunktion ist, muss die Definition einfach lauten

def noop(*args, **kwds):
    return args[0] if args else None

Das Gegenargument zum Gegenargument ist, dass die Verwendung von None als Standard in all diesen Fällen schneller ist, da sie dem Algorithmus ermöglicht, den Callback zu überspringen, anstatt ihn aufzurufen und nichts Nützliches tun zu lassen.

Referenzen


Quelle: https://github.com/python/peps/blob/main/peps/pep-0559.rst

Zuletzt geändert: 2025-02-01 08:55:40 GMT