第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

顯式關(guān)閉文件重要嗎?

顯式關(guān)閉文件重要嗎?

繁華開滿天機 2019-06-20 10:15:14
顯式關(guān)閉文件重要嗎?在Python中,如果您打開一個文件而不調(diào)用close(),或者關(guān)閉文件但不使用try-finally或者“with“語句,這是一個問題嗎?還是依賴Python垃圾收集來關(guān)閉所有文件就足夠了?例如,如果您這樣做的話:for line in open("filename"):     # ... do stuff .....這是否是一個問題,因為文件永遠無法關(guān)閉,并且可能會發(fā)生異常,從而阻止它被關(guān)閉?或者它一定會在結(jié)束時關(guān)閉。for語句,因為文件超出了作用域?
查看完整描述

3 回答

?
侃侃無極

TA貢獻2051條經(jīng)驗 獲得超10個贊

在您的示例中,不能保證在解釋器退出之前關(guān)閉該文件。在當前版本的CPython中,文件將在for循環(huán)結(jié)束時關(guān)閉,因為CPython使用引用計數(shù)作為其主要垃圾收集機制,但這是實現(xiàn)細節(jié),而不是語言的特性。Python的其他實現(xiàn)不能保證以這種方式工作。例如,IronPython、PyPy和Jython不使用引用計數(shù),因此不會在循環(huán)結(jié)束時關(guān)閉文件。

依賴CPython的垃圾收集實現(xiàn)是不好的做法,因為它降低了代碼的可移植性。如果使用CPython,可能不會出現(xiàn)資源泄漏,但是如果您曾經(jīng)切換到不使用引用計數(shù)的Python實現(xiàn),則需要遍歷所有代碼并確保所有文件都正確關(guān)閉。

對于您的示例,請使用:

with open("filename") as f:
     for line in f:
        # ... do stuff ...


查看完整回答
反對 回復(fù) 2019-06-20
?
嗶嗶one

TA貢獻1854條經(jīng)驗 獲得超8個贊

有些Pythons在不再被引用時會自動關(guān)閉文件,而另一些則不會,當Python解釋器退出時,將由O/S關(guān)閉文件。

即使是為您關(guān)閉文件的Pythons,也不能保證時間:它可以是立即的,也可以是秒/分鐘/小時/天之后。

因此,雖然您使用的Python可能不會遇到問題,但打開文件絕對不是一個好做法。實際上,在cpython 3中,您現(xiàn)在會收到警告,如果不這樣做,系統(tǒng)必須為您關(guān)閉文件。

寓意:自己打掃干凈。*)


查看完整回答
反對 回復(fù) 2019-06-20
?
慕容3067478

TA貢獻1773條經(jīng)驗 獲得超3個贊

雖然在這種特殊情況下使用這種結(jié)構(gòu)是相當安全的,但推廣這種做法也有一些注意事項:

  • Run可能會耗盡文件描述符,盡管不太可能,但想象一下這樣的bug。
  • 您可能無法在某些系統(tǒng)上刪除上述文件,例如Win 32
  • 如果您運行的是CPython以外的任何東西,則不知道何時為您關(guān)閉了文件
  • 如果以寫或讀-寫模式打開文件,則不知道何時刷新數(shù)據(jù)。


查看完整回答
反對 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 724 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號