PEP 336 – None aufrufbar machen
- Autor:
- Andrew McClelland <eternalsquire at comcast.net>
- Status:
- Abgelehnt
- Typ:
- Standards Track
- Erstellt:
- 28. Okt. 2004
- Post-History:
Inhaltsverzeichnis
Zusammenfassung
None sollte ein aufrufbares Objekt sein, das bei Aufruf mit beliebigen Argumenten keine Nebenwirkungen hat und None zurückgibt.
BDFL-Verkündigung
Diese PEP wird abgelehnt. Es wird als Merkmal angesehen, dass None bei Aufruf einen Fehler auslöst. Der Vorschlag erfüllt die Tests hinsichtlich Offensichtlichkeit, Klarheit, Explizitheit und Notwendigkeit nicht. Das bereitgestellte Switch-Beispiel ist nett, wird aber leicht durch eine einfache Lambda-Definition gehandhabt. Siehe Diskussion auf python-dev am 17. Juni 2005 [1].
Motivation
Einen Programmierstil für auswählbare Aktionen zu ermöglichen, der den minimalistischen funktionalen Programmierzielen der Python-Sprache besser entspricht.
Begründung
Es soll die Verwendung von None in Methodentabellen als universelle keine Wirkung erlauben, anstatt entweder (1) einen Methodentabelleneintrag vor dem Aufruf gegen None zu prüfen oder (2) eine lokale Methode ohne Wirkung mit Argumenten zu schreiben, die denen anderer Funktionen in der Tabelle ähneln.
Die Semantik wäre effektiv
class None:
def __call__(self, *args):
pass
Wie man es benutzt
Vorher: Überprüfung des Funktionstabelleneintrags gegen None
class Select:
def a(self, input):
print 'a'
def b(self, input):
print 'b'
def c(self, input):
print 'c'
def __call__(self, input):
function = { 1 : self.a,
2 : self.b,
3 : self.c
}.get(input, None)
if function: return function(input)
Vorher: Verwendung einer lokalen Methode ohne Wirkung
class Select:
def a(self, input):
print 'a'
def b(self, input):
print 'b'
def c(self, input):
print 'c'
def nop(self, input):
pass
def __call__(self, input):
return { 1 : self.a,
2 : self.b,
3 : self.c
}.get(input, self.nop)(input)
Nachher
class Select:
def a(self, input):
print 'a'
def b(self, input):
print 'b'
def c(self, input):
print 'c'
def __call__(self, input):
return { 1 : self.a,
2 : self.b,
3 : self.c
}.get(input, None)(input)
Referenzen
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0336.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT