久久久精品2019免费观看_亚洲国产精品成人久久久_69国产成人综合久久精品91_国产精品久久精品视

零基礎(chǔ)Python到全棧-關(guān)閉文件

前面說過,f=open,它涉及到兩方面的資源,一方面是這個變量所占的內(nèi)存空間,這個內(nèi)存空間我們要進行回收,就直接del f就可以了。

del f

它是解除變量名f與它對應(yīng)的值的綁定關(guān)系,這樣這個變量值就變成了垃圾,被垃圾回收機制回收了。

這是回收應(yīng)用程序的資源。

然后還有一方面就是操作系統(tǒng)打開的這個具體的文件所占的內(nèi)存空間,這個內(nèi)存空間我們也要進行回收,如果我們不回收,操作系統(tǒng)就會一直維護著打開的這個文件。

所以我們還要干一件事,就是f.close()。

f.close()

這是在操作f這個文件對象,這也就相當于向操作系統(tǒng)發(fā)出請求,讓操作系統(tǒng)把剛剛打開的這個文件關(guān)掉,這是回收操作系統(tǒng)的資源。

但是我們這樣寫的話就會有一個問題,我們前面已經(jīng)用了del解除了f和變量值的綁定關(guān)系了,這個文件對象已經(jīng)被回收了。

后面又要用到f來調(diào)用這個close()這個功能,很明顯這樣是調(diào)用不到的,所以我們要在這個變量還在的時候就告訴操作系統(tǒng),讓操作系統(tǒng)幫我們把這個文件關(guān)掉。

然后再del f。

f.close()
del f

但是通常我們不會主動來做這一步,你會發(fā)現(xiàn)前面寫程序,也沒有說定義了一個變量,然后后面不用了再把它del一下。

這一步不用自己來做,交給python的垃圾回收機制就可以了。

現(xiàn)在我只是給你們講原理。

f這個文件對象所占的內(nèi)存空間,其實也就跟我們前面正常定義一個整型變量1、24、100所占的內(nèi)存空間都差不多。

我們后面把這個f用在其他地方的時候,這個值自然也就被回收了。

所以我們后面寫程序的時候,不用考慮應(yīng)用程序的資源回收問題,只需要考慮操作系統(tǒng)的資源回收問題就好了。

因為操作系統(tǒng)的資源回收問題,python的垃圾回收機制管不了,而且操作系統(tǒng)能夠同時打開的問價數(shù)量也是有限的。

當然我們以后做一些比較大型的項目的話,我們會把操作系統(tǒng)的限制改大一些,因為你的操作系統(tǒng)再被大量用戶同時訪問的時候,很多用戶都涉及到操作你的硬盤,打開你的文件。

這樣就會有問題,你的操作系統(tǒng)可能會同時打開幾千幾萬個文件,這時候你的應(yīng)用程序性能將就下降了。

這時候很多用戶可能就訪問不到你的資源了。

當然操作系統(tǒng)的限制改大也不是無限改大的。

如果你就是頭鐵,不想關(guān)閉文件,操作系統(tǒng)就會過一段時間掃描一遍,看看有沒有不用的文件,然后它也會幫你關(guān)掉。

但是這個文件在被操作系統(tǒng)主動關(guān)閉之前,它對電腦的性能也是一種消耗。

所以關(guān)閉文件這一步非常重要。

現(xiàn)在我們來運行一下。

f = open('date/a.txt', mode='rt')  # 相對路徑
res = f.read()
print(res)
f.close()
del f

打印出來好像是亂碼了,這個問題很好解決,根據(jù)前面我們學(xué)過的字符編碼知識,知道這只要指定字符編碼就能解決的。

未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » 零基礎(chǔ)Python到全棧-關(guān)閉文件

贊 (0) 打賞

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

微信掃一掃打賞