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
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äremap(noop, iterable),sorted(iterable, key=noop)usw. (filter,maxundminakzeptieren 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 lautendef noop(*args, **kwds): return args[0] if args else NoneDas Gegenargument zum Gegenargument ist, dass die Verwendung von
Noneals 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
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0559.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT