あなたが持っているとしましょう:
def my_func():
fh = open(...)
try:
print fh.read()
finally:
fh.close()
私の最初の質問は、try/finally (または with) ステートメントを使用する価値はありますか? 関数が(ガベージコレクションを介して)終了すると、とにかくファイルは閉じられませんか?
Martelliの「python cookbook」のレシピを読んだ後、私はこれに出くわしました
all_the_text = open('thefile.txt').read()
「そうすると、読み取り操作が終了するとすぐに、ファイル オブジェクトへの参照がなくなります。実際には、Python はすぐに参照の欠如に気づき、すぐにファイルを閉じます。」
私の関数の例はほとんど同じです。参照はありますが、参照の寿命が非常に短いというだけです。
2 番目の質問は、Martelli の声明の「すぐに」とはどういう意味ですか? 参照がまったくない場合でも、ファイルのクローズはガベージ コレクション時に発生しませんか?