你在 Python 中經常寫的 with..as.. 究竟是個啥?

你在 Python 中經常寫的 with..as.. 究竟是個啥?

小帥b 學習python的正確姿式 python

with 語句能夠說是 Python 中 「人生苦短,我用 Python」 的經典表明之一,它可使得咱們在編寫代碼的時候很是簡短,且行之有效。ide

舉一個簡單的例子,在 Java 中,你想要讀取一個文件中的內容,通常來講須要本身定義一個這樣的讀取方法:學習

你在 Python 中經常寫的 with..as.. 究竟是個啥?

而在 Python 中,想要讀取文件就能夠直接這樣:對象

你在 Python 中經常寫的 with..as.. 究竟是個啥?

這樣看起來,是挺短呀。blog

你在 Python 中經常寫的 with..as.. 究竟是個啥?

其實文件操做中所涉及到的 try...except..finally 都給封裝起來了:資源

你在 Python 中經常寫的 with..as.. 究竟是個啥?

而咱們經過 with 拿了對象就能夠直接操做了,是否是有點強大,那麼它是怎麼作到的呢?get

接下來就是:學習 python 的正確姿式

你在 Python 中經常寫的 with..as.. 究竟是個啥?

with 語句是用於上下文對象的管理,經過它你就能夠操做上下文對象:it

你在 Python 中經常寫的 with..as.. 究竟是個啥?

好比上面這個,在 with 調用後獲得的 Handsomeb對象裏面,須要用到 enter () 和 exit() 這兩個方法,也就是說,若是你想要讓你建立的對象能被 with 使用,那麼你這個對象必需要有 enter () 和 exit() 這兩個方法。class

這兩個方法是幹什麼用的呢?變量

當咱們使用 with 去執行這個對象的時候,就會先去調用 enter () ,最後再調用 exit() :

你在 Python 中經常寫的 with..as.. 究竟是個啥?

打印出來是這樣的:

你在 Python 中經常寫的 with..as.. 究竟是個啥?

能夠看到,咱們使用 with 去調用 get_Handsomeb ,獲得的這個對象會先執行「進入 enter 方法」,接着再執行 with 裏面的 「get...」,等都執行完畢以後,再去執行 「進入 exit 方法」 。

咱們再來看看 with..後面緊跟着的 as 是幹嗎的呢?

你在 Python 中經常寫的 with..as.. 究竟是個啥?

在這裏的 as 後面的變量名稱,其實獲得的就是 enter 方法返回的值。

你在 Python 中經常寫的 with..as.. 究竟是個啥?

你看,我在 enter 方法中定義返回了 「handsomeb」 ,而後使用 「with .. as h」 的方式獲取對象, 從打印結果能夠看到:這時候 h 獲得的就是 enter 方法中的返回值 「handsomeb」 。

能夠返回一個對象:

你在 Python 中經常寫的 with..as.. 究竟是個啥?

接着,咱們再來看看咱們定義的這個 exit 方法,細心點你會發現,這裏攜帶了這麼幾個參數:type, value, trace。

它們是幹嗎的呢?這就是咱們開頭所說的問題。

咱們在操做一些對象的時候,好比操做文件的時候,可能會發現這樣那樣未知的異常,好比文件的位置找不到了,文件打不開了等等問題,關於這些異常的信息,咱們能夠在 exit 方法中獲得。

舉個例子:

咱們將type, value, trace這幾個參數都打印出來,而後建立一個計算的方法:

你在 Python 中經常寫的 with..as.. 究竟是個啥?

不過這個方法執行的是 100/0 ,咱們知道 0 是不能做爲除數的,這樣是會報錯的,咱們使用 with 來調用下看看:

你在 Python 中經常寫的 with..as.. 究竟是個啥?

執行結果是這樣的:

你在 Python 中經常寫的 with..as.. 究竟是個啥?

能夠看到,這些拋出的異常信息,咱們能夠在 exit 方法中的參數中直接獲取,那麼就能夠在這裏作一些事情(對一些異常進行處理)了,好比說,在文件操做中,咱們到最後都須要關閉這個文件流的,可是有了 exit 這個方法, Python 直接在裏面作了資源關閉操做,咱們就不須要再手動去關閉了。

ok,以上就是今天我給你分享的 with 工做方式,總結一下就是:

1.經過 with 語句能夠獲得一個上下文管理器
2.執行對象
3.加載 enter 方法
4.加載 exit 方法
5.執行 enter
6.as 能夠獲得 enter 的返回值
7.拿到對象執行相關操做
8.執行完了以後調用 exit 方法
9.若是遇到異常,exit 能夠獲取到異常信息
10.在 exit 中處理異常,返回 True
11.繼續執行 with 後面的語句。

但願對你有幫助,咱們下回見,peace!

相關文章
相關標籤/搜索