這個語法是用來代替傳統的try...finally語法的。
with expression [ as variable] with-block
基本思想是with所求值的物件必須有乙個__enter__()方法,乙個__exit__()方法。
緊跟with後面的語句被求值後,返回物件的__enter__()方法被呼叫,這個方法的返回值將被賦值給as後面的變數。當with後面的**塊全部被執行完之後,將呼叫前面返回物件的__exit__()方法。
file = open("/tmp/foo.txt")try:
data = file.read()
finally:
file.close()
使用with...as...的方式替換,修改後的**是:
with open("/tmp/foo.txt") as file:
data = file.read()
#!/usr/bin/env python
# with_example01.py
class
sample:
def__enter__
(self):
print
"in __enter__()"
return
"foo"
def__exit__
(self, type, value, trace):
print
"in __exit__()"
defget_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__()方法被呼叫with真正強大之處是它可以處理異常。可能你已經注意到sample類的__exit__方法有三個引數- val, type 和 trace。這些引數在異常處理中相當有用。
python 中 with as的用法
with從python 2.5就有,需要from future import with statement。自python 2.6開始,成為預設關鍵字。在what s new in python2.6 3.0中,明確提到 the with statement is a control flow st...
Python中的with as 語法
使用語言的好特性,而不是那些糟糕的特性 不知道誰說的 好久不學習python的語法了,上次去面試,和面試官聊到了python中的with as statement 也稱context manager 挺感興趣的,這兩天學習了一番,收穫頗豐在此分享。先說明乙個常見問題,檔案開啟 1 2 34 5 6 ...
Python中的with as 語法
1 使用with.as.的原因 python操作檔案時,需要開啟檔案,最後手動關閉檔案。通過使用with.as.不用手動關閉檔案。當執行完內容後,自動關閉檔案。2 先說明乙個常見問題,檔案開啟 try f open do something except do something finally f...