モジュールからコンパイルされた Python バイトコードを見ると、最後に次のように表示されます。
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
つまり、 areturn
はモジュールのルート レベルで完全に有効です。ただし、ソース コードで使用しようとすると、次のようになります。
SyntaxError: 'return' outside function
なんで?
もちろん、これは言語設計上の決定です。しかし、なぜそれが取られたのですか?Areturn
は、モジュールで非常に役立つことがよくあります。たとえば、モジュールの先頭に次のコードを書きたいことがあります。
import sys
if sys.platform != "linux2":
print "your platform is not yet supported"
# define some stubs
def foo(): pass
def bar(): pass
return
そして、そこで例外を発生させたくありません (モジュールがロードされず、望ましくないため)。
実際、私は Python バイトコードをオンザフライで操作し、ただ return を実行できる (または私の場合は return が行われた最後にジャンプする) いくつかのコードを一緒にハックしました。これは機能します。CPython のみである唯一の理由は、コード オブジェクトを操作する標準的な方法がないためです。
これがコードです。
考えられる答えについては、ランダムな議論ではなく、実際の証拠、グイド・ヴァン・ロッサムの過去の発言などを好みます。もちろん、これは利点(すでに提示されているように)と欠点の両方について自分自身で行うことができますが、それに対する大きな理由は実際にはわかりません.