公眾號新增加了一個欄目,就是每天給大家解答一道Python常見的面試題,反正每天不貪多,一天一題,正好合適,只希望這個面試欄目,給那些正在準備面試的同學,提供一點點幫助!
小猿會從最基礎的面試題開始,每天一題。如果參考答案不夠好,或者有錯誤的話,麻煩大家可以在留言區給出自己的意見和討論,大家是要一起學習的 。
廢話不多說,開始今天的題目:
問:說說Python中with的用法?
答:Python 文件使用完畢後必須關閉,因為文件對象會佔用作業系統的資源,並且作業系統同一時間能打開的文件數量也是有限的。但是由於文件讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try ... finally來實現 。如下面代碼所示:
try:
f = open('xxx')
except:
print 'fail to open'
exit(-1)
try:
do something
except:
do something
finally:
f.close()
但是上面代碼太冗長了。所以有with替代了之前在python裡使用try...finally來做清理工作。除了有更優雅的語法,with還可以很好的處理上下文環境產生的異常。如下面代碼所示:
with open("xxx.txt") as file:
print(file.read())
Python推薦使用with方法來讀取文件,防止程式設計師打開文件後忘記關閉文件。
不過with是怎麼實現的呢?
with可操縱的對象必須有__enter__和__exit__兩個方法。
with後面的對象在求值後,對象的__enter__()方法被調用。這將把with後面緊緊跟著的對像賦值給as後面的變量。
with下面的語句執行好以後,將調用前面返回對象的__exit__()方法。
下面例子可以具體說明with如何工作:
class Sample:
def __enter__(self):
print("In __enter__()")
return "Foo"
def __exit__(self,type, value, trace):
print("In __exit__()")
def get_sample():
return Sample()
with get_sample() as sample:
print("sample:" + sample)
輸出結果:
In__enter__()
sample: Foo
In__exit__()
1. __enter__()方法被執行
2. __enter__()方法返回的值 - 」Foo」賦值給變量’sample』
3. 執行代碼塊,列印變量」sample」的值為 「Foo」
4. __exit__()方法被調用
文末推薦文章連結:
https://www.cnblogs.com/wanglei-xiaoshitou1/p/9238275.html
如果對於參考答案有不認同的,大家可以在評論區指出和補充,歡迎留言!
更多題目:
1-40、Python面試1-40題匯總
關注小猿公眾號,每天學習一道題