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

Python Enhancement Proposals

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


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

Zuletzt geändert: 2025-02-01 08:59:27 GMT