python中with可以明顯改進代碼友好度,比如:
復制代碼
代碼如下:
with open('a.txt') as f:?
??? print f.readlines()?
為了我們自己的類也可以使用with, 只要給這個類增加兩個函數__enter__, __exit__即可:
復制代碼
代碼如下:
>>> class A:?
??? def __enter__(self):?
??????? print 'in enter'?
??? def __exit__(self, e_t, e_v, t_b):?
??????? print 'in exit'?
?
>>> with A() as a:?
??? print 'in with'?
?
in enter?
in with?
in exit?
另外python庫中還有一個模塊contextlib,使你不用構造含有__enter__, __exit__的類就可以使用with:
復制代碼
代碼如下:
>>> from contextlib import contextmanager?
>>> from __future__ import with_statement?
>>> @contextmanager?
... def context():?
...???? print 'entering the zone'?
...???? try:?
...???????? yield?
...???? except Exception, e:?
...???????? print 'with an error %s'%e?
...???????? raise e?
...???? else:?
...???????? print 'with no error'?
...?
>>> with context():?
...???? print '----in context call------'?
...?
entering the zone?
----in context call------?
with no error?
使用的最多的就是這個contextmanager, 另外還有一個closing 用處不大
復制代碼
代碼如下:
from contextlib import closing?
import urllib?
?
with closing(urllib.urlopen('http://www.python.org')) as page:?
??? for line in page:?
??????? print line?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
