Wartości zwracane w procedurze Pythona [zamknięte]

W Pythonie można utworzyć procedurę, która nie ma wyraźnego powrotu. to znaczy.:

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

Ponadto możliwe jestprzydzielać wyniki tej funkcji dla zmiennej:

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

Dlaczego do cholery to jest? Jaka logika językowa kryje się za tą zaskakującą decyzją projektową? Dlaczego nie powoduje to błędu kompilatora?

EDYCJA: Tak, zdaję sobie sprawę, że tak działa. Dzięki. Moje pytanie brzmi: DLACZEGO? Wygląda na taki pewny sposób na wprowadzenie subtelnych błędów do kodu. I wydaje się, jak wspomniano poniżej, e-satis, aby przeciwstawić się bardzo mądremu pytonicznemu powiedzeniu, że „wyraźne jest lepsze niż ukryte”.

Więc o co chodzi? Czy to tylko nadzór projektowy, czy upraszczające założenie, czy celowa, przemyślana decyzja?

EDIT: Czy wszyscy zgodziliby się, że wyrażanie intencji w ten sposób jest o wiele lepsze:

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

Jeśli tak, to dlaczego Python wolałby, aby poprzedni styl miał wyjątek czasu kompilacji?

EDYCJA: S.Lott wyraźnie wskazuje ten punkt (a inni robią to samo, jego po prostu wydaje mi się jasne), że to zachowanie wynika z faktu, że Python jest językiem dynamicznym i dlatego nie może sprawdzić w czasie kompilacji zachowanie systemu w czasie wykonywania.

Ponieważ nie ma rozróżnienia między procedurami (te funkcje, które nie zwracają żadnych wartości) i funkcjami (tymi, które to robią), nie ma nic do wymuszenia w czasie kompilacji. Oznacza to, że kiedy dochodzimy do zachowania w czasie wykonywania, albo w niektórych przypadkach mamy katastrofalną awarię (rzucamy wyjątek), albo po cichu nie udaje się, że programista wiedział, co robi i zrozumiał domyślne zachowanie.

Pythonicznym sposobem jest zrobić to drugie, sposób w stylu C ma zrobić pierwszy.
Wydaje się to mieć sens jako dobry powód, aby to zrobić w ten sposób.

Jasne uzasadnienie S.Lotta jest ukryte w komentarzach do zaakceptowanej odpowiedzi, więc pomyślałem, że najlepiej będzie tutaj podsumować.

Będę wstrzymywał się z zaakceptowaniem odpowiedzi przez chwilę, aby sprawdzić, czy S.Lott udzieli oficjalnej odpowiedzi. W przeciwnym razie dam punkty SilentGhost.

questionAnswers(6)

yourAnswerToTheQuestion