20
open( "hello.txt"、 "wb")をfとして使用:
    f.write( "Hello Python!\ n")

と同じようです

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()

f=の代わりにopen..を使用する利点は何ですか?糖衣構文だけですか?1行のコードを保存するだけですか?

4

3 に答える 3

31

ステートメントバージョンと同等にするために、with作成したコードは代わりに次のようになります。

f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()

これは糖衣構文のように見えるかもしれませんが、リソースを確実に解放します。一般に、世界はこれらの不自然な例よりも複雑でありtry.. except...、極端なケースを忘れたり、処理に失敗したりすると、リソースリークが発生します。

このwithステートメントは、これらのリークからあなたを救い、クリーンなコードを書きやすくします。完全な説明については、PEP343を参照してください。多くの例があります。

于 2010-04-29T15:12:13.377 に答える
13

f.write例外をスローする場合は、f.close()を使用するときにwith呼び出され、2番目のケースでは呼び出されません。またf、スコープが小さく、使用時にコードがクリーンになりますwith.

于 2010-04-29T15:02:34.627 に答える
3

fの間に例外が発生した場合、前者は引き続き閉じますf.write()

于 2010-04-29T15:01:36.187 に答える