Jeśli spojrzeć na kod bajtowy Pythona skompilowany z modułami, zobaczysz na końcu:Python: dlaczego `nie return` dozwolone w module
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
Tj a return
jest całkowicie poprawny na poziomie katalogu głównego modułu. Jeśli jednak spróbujesz użyć go w kodzie źródłowym, otrzymasz:
SyntaxError: 'return' outside function
Dlaczego?
Jest to oczywiście decyzja dotycząca projektowania języka. Ale dlaczego zostało to zrobione? A return
jest często bardzo przydatny w module. Na przykład. I czasami chce napisać ten kod na początku modułu:
import sys
if sys.platform != "linux2":
print "your platform is not yet supported"
# define some stubs
def foo(): pass
def bar(): pass
return
I nie chcą podnieść wyjątek tam (bo to spowodowałoby nie moduł ładowania, który nie chcę).
Właściwie hacked razem jakiś kod, który może manipulować kodu bajtowego Pythona w locie i po prostu zrobić zwrot (lub w moim przypadku skoku do końca gdzie zwrot jest zrobione). To działa. Jedynym powodem, dla którego jest to tylko CPython, jest brak standardowego sposobu manipulowania obiektem kodu.
Here to kod.
Dla możliwych odpowiedzi: wolałbym prawdziwe dowody, niektóre przeszłe oświadczenia Guido van Rossum i tak o tym nie tyle byle random dyskusja. Oczywiście mogę to objąć zarówno zaletami (jak już przedstawiono), jak i wadami, ale tak naprawdę nie widzę wielkiego powodu przeciwko niemu.
dlaczego nie podnosisz wyjątku? to zatrzyma wykonanie i zwróci informację o tym, dlaczego od rozmówcy zależy słuchanie wyjątku. –
@JoranBeasley: Nie załaduje modułu. Mówię o przypadkach, w których nadal chcę załadować moduł. – Albert
następnie oddzielny moduł, który użytkownik może zaimportować ... jeśli nie jest obsługiwany, nie powinien być obsługiwany ... w '__init __. Py' możesz zrobić' try: import no_linux2; z wyjątkiem: import alt_implementation jako no_linux2' –