with語句的優點和它的工作機制

2021-09-27 04:14:01 字數 1764 閱讀 9747

with

open

('filename'

,method='')

as file_object:

content = file_object.read(

)

特點

1. with語句開啟檔案,並指示了乙個語句塊(即接下來有乙個縮排的多行**區域),該語句塊內的**是對檔案的操作,當脫離該語句塊時(即沒有了縮排),則表示with語句塊結束,接下來的**不是對檔案的操作**。

2. 注意,當脫離with語句塊的時候,即表示結束了檔案的操作,這時python會自動呼叫 close() 關閉這個檔案,此後不能再引用這個檔案物件。

優點

1.使用簡單方便。

2.自動管理檔案物件,不必使用 close()

3.當遭遇程式bug時導致本來應有的 close() 未能執行,如果使用with,python保證即使出現故障,也能保證檔案被正確關閉。

with的工作機制

class

sample

:def

__enter__

(self)

:print

("in__enter__()"

)return

"foo"

def__exit__

(self,

type

, value, trace)

:print

("in __exit__()"

)with sample():

pass

執行結果:

in__enter__(

)in __exit__(

)[finished in

0.1s]

將with物件列印看看

class

sample

:def

__enter__

(self)

:print

("in__enter__()"

)return

"foo"

def__exit__

(self,

type

, value, trace)

:print

("in __exit__()"

)print

(sample())

with sample(

)as ob:

print

("ob:"

, ob)

執行結果:

<__main__.sample object at 0x000002727eb67198

>

in__enter__(

)ob: foo

in __exit__(

)[finished in

0.1s]

with的實現機制是:with物件應該具有乙個__enter__()方法和乙個__exit__()方法。

with語句將首先呼叫物件的__enter__()方法,並將__enter__()方法的返回值賦值給as後面的變數。當with後面的**塊全部被執行完之後,with將呼叫象的__exit__()方法。

解釋下浮動和它的工作原理?清除浮動的技巧

浮動元素脫離文件流,不佔據空間。浮動元素碰到包含它的邊框或者浮動元素的邊框停留。浮動元素引起的問題和解決辦法?浮動元素引起的問題 父元素的高度無法被撐開,影響與父元素同級的元素 與浮動元素同級的非浮動元素 內聯元素 會跟隨其後 若非第乙個元素浮動,則該元素之前的元素也需要浮動,否則會影響頁面顯示的結...

解釋下浮動和它的工作原理?清除浮動的技巧

浮動元素脫離文件流,不佔據空間。浮動元素碰到包含它的邊框或者浮動元素的邊框停留。浮動元素引起的問題和解決辦法?浮動元素引起的問題 父元素的高度無法被撐開,影響與父元素同級的元素 與浮動元素同級的非浮動元素 內聯元素 會跟隨其後 若非第乙個元素浮動,則該元素之前的元素也需要浮動,否則會影響頁面顯示的結...

5 2 併發和它的管理

在現代 linux 系統,有非常多的並發源,並且因此而來的可能競爭情況.多個使用者空間程序在執行,它們可能以令人驚訝的方式組合訪問你的 smp 系統能夠同時在不同處理器上執行你的 核心 是可搶占的 你的驅動 可能在任何時間失去處理器,代替它的程序可能也在你的驅動中執行.裝置中斷是能夠導致你的 併發執...