wwii の回答を見ながら、私は彼のインデントについて、それは間違っているとコメントしました。しかし、私の IDLE で彼のコードを実行した後、問題なく実行されることがわかりました。
正しい結果が得られていることを確認するために、いくつかの例を試しました。
>>> def foo():
return 0
>>> foo()
0
>>> def bar():
return foo() + 5
>>> bar()
5
>>> def foobar():
return foo() + bar()
>>> foobar()
5
>>>
ご覧のとおり、すべて正常に動作しました。通常のスクリプトで同じことをしようとすると、Python はプログラムを実行する前にエラーを発生させ、ブロックをインデントするのを忘れていることを通知します。
対話型 IDLE ではこの種のインデントが許可されているのに、通常のスクリプトでは許可されていないのはなぜですか? IDLE のドキュメント、より具体的にはセクション25.5.2.1 Automatic indentationを調べましたが、答えを見つけるのに役に立ちませんでした。
さらに、関数に関する Python ドキュメントには、関数本体をインデントする必要があると記載されています。
キーワード def は関数定義を導入します。その後に、関数名と括弧で囲まれた仮パラメーターのリストが続く必要があります。関数の本体を形成するステートメントは次の行から始まり、インデントする必要があります。
(私のものを強調)
IDLE ではこの種のインデントが許可されているのに、通常のスクリプトでは完全にシャットダウンされるのはなぜですか? これはわざとですか?もしそうなら、この動作はどこかに文書化されていますか?