Pythonでは、を呼び出さずにファイルを開くか、ファイルをclose()閉じてtry- finallyまたは " with"ステートメントを使用しない場合、これは問題ですか?それとも、すべてのファイルを閉じるためにPythonガベージコレクションに依存するコーディングプラクティスとして十分ですか?たとえば、これを行う場合:
for line in open("filename"):
# ... do stuff ...
...これはファイルを閉じることができず、ファイルを閉じるのを妨げる例外が発生する可能性があるため、これは問題ですか?またはfor、ファイルが範囲外になるため、ステートメントの最後に確実に閉じられますか?
forブロックと関数/クラス/モジュールの区別とは関係ありません。それよりもはるかに単純です。オブジェクトにはスコープがなく、名前だけがあります。このオブジェクトを参照する名前はないため、ここにスコープ内に留まったり、スコープ外に出たりすることはありません。
forループに関連付けられたスコープがあるという彼の仮定を修正し、ファイルがまったく異なる理由で閉じられることを述べています。ここでは関係がないため、Pythonのスコープについては説明しません。
for。その参照カウントはゼロになり、自動的に閉じられますが、Pythonでスコープを定義するのは関数、クラス、およびモジュールのみであり、他の複合ステートメントは定義しません。