これらはどちらも非常に不快です。あなたの2番目の質問に答えるために、2番目の機能では、ファイルは実際に自動的に閉じられます。これは、with
ステートメントで使用されるプロトコルの一部です。皮肉なことに、このファイルはではなく、が最初の例で閉じられていることが保証されています(さらに1秒後に表示されます)。
最終的に、私はwith
ステートメントを使用することを選択すると、ここに理由ですでしょう - PEP 343に従って:あなたが見ることができるように、あなたは多くを得る
mgr = (EXPR)
exit = type(mgr).__exit__ # Not calling it yet
value = type(mgr).__enter__(mgr)
exc = True
try:
try:
VAR = value # Only if "as VAR" is present
BLOCK
except:
# The exceptional case is handled here
exc = False
if not exit(mgr, *sys.exc_info()):
raise
# The exception is swallowed if exit() returns true
finally:
# The normal and non-local-goto cases are handled here
if exc:
exit(mgr, None, None, None)
:
with EXPR as VAR:
BLOCK
がに変換されこの場合、ファイルは途中で何が起こったとしても閉じられることが保証されています。これは読みやすさのためにも役立ちます。ファイルを開こうとする度にこのコードブロックを置かなければならないと想像してください!
この場合、ほとんどのpythonicは関数の記述に気を配りません。 –
@StevenRumbalski: 'do_something_with(read_all(path)+ something_else) 'のような式でこの関数を使いたいと思っています。 – georg
@StevenRumbalskiは、 txt ')。read()) 'は非常に「ガベージコレクション」されます。 – heltonbiker