Если вы посмотрите на байт-код Python, скомпилированный из модулей, вы увидите в конце:
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
т.е. a return
отлично действует на корневом уровне модуля. Однако, если вы попытаетесь использовать его в исходном коде, вы получите:
SyntaxError: 'return' outside function
Почему?
Это, конечно, решение для языкового дизайна. Но почему это было сделано? A return
часто весьма полезен в модуле. Например. Я иногда хочу написать этот код в начале модуля:
import sys
if sys.platform != "linux2":
print "your platform is not yet supported"
# define some stubs
def foo(): pass
def bar(): pass
return
И я не хочу создавать там исключение (потому что это приведет к тому, что модуль не будет загружаться, который я не хочу).
Собственно, я взломал некоторый код вместе, который может управлять байт-кодом Python "на лету" и просто сделать возврат (или в моем случае перейти к концу, где выполняется возврат). Это работает. Единственная причина, по которой это только CPython, заключается в том, что нет стандартного способа манипулирования объектом кода.
Здесь - это код.
Для возможных ответов: я бы предпочел настоящие доказательства, некоторые прошлые высказывания Гвидо ван Россума или около того об этом, а не только о какой-либо случайной дискуссии. Я, конечно, могу использовать оба преимущества (как уже было сказано) и недостатки, но на самом деле я не вижу большой причины против этого.