Rückgabewerte der Python-Prozedur [closed]

In Python ist es möglich, eine Prozedur ohne explizite Rückgabe zu erstellen. d. h .:

def test(val):
    if 0 == val:
        return 8

Weiter ist es möglichzuordnen Die Ergebnisse dieser Funktion in eine Variable umwandeln:

>>> a = test(7)
>>> print `a`
'None'

Warum zum Teufel ist das so? Welche Sprachlogik steckt hinter dieser rätselhaften Designentscheidung? Warum löst das nicht einfach einen Compilerfehler aus?

EDIT: Ja, mir ist klar, dass es so funktioniert. Vielen Dank. Meine Frage ist WARUM? Es scheint so ein sicherer Weg zu sein, subtile Fehler in Ihren Code einzuführen. Und es scheint, wie weiter unten von e-satis erwähnt, gegen das sehr weise pythonische Sprichwort zu sprechen, dass "explizit besser ist als implizit".

Also, was ist damit los? Ist es nur eine Entwurfsüberprüfung oder eine vereinfachende Annahme oder eine absichtliche, überlegte Entscheidung?

EDIT: Würden alle zustimmen, dass es viel besser ist, die Absicht auf diese Weise auszudrücken:

def test(val):
    if 0 == val:
        return 8
    else:
        return None

Wenn ja, warum würde Python den früheren Stil dem Auslösen einer Kompilierungsausnahme vorziehen?

BEARBEITEN: S.Lott bringt den Punkt explizit auf den Punkt (und andere tun es auch, sein scheint mir nur am klarsten zu sein), dass dieses Verhalten auf der Tatsache beruht, dass Python eine dynamische Sprache ist und daher beim Kompilieren nicht überprüft werden kann, ob Laufzeitverhalten des Systems.

Da es keine Unterscheidung zwischen Prozeduren (jene Funktionen, die keine Werte zurückgeben) und Funktionen (jene, die dies tun) gibt, ist zum Zeitpunkt der Kompilierung nichts zu erzwingen. Das bedeutet, dass wir zur Laufzeit entweder einen katastrophalen Fehler haben (wir lösen eine Ausnahme aus) oder dass wir stillschweigend versagen, wenn wir davon ausgehen, dass der Programmierer wusste, was sie taten, und das Standardverhalten verstanden haben.

Die pythonische Methode ist die letztere, die C-artige Methode ist die erstere.
Das scheint ein guter Grund zu sein, es so zu machen.

Die klare Rechtfertigung von S.Lott ist in den Kommentaren zu der akzeptierten Antwort begraben, weshalb ich es für das Beste hielt, sie hier zusammenzufassen.

Ich werde etwas warten, bis ich die Antwort akzeptiere, um zu sehen, ob S.Lott eine offizielle Antwort gibt. Ansonsten gebe ich die Punkte an SilentGhost.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage