在python 代碼中,with的用法可以讓代碼變得簡潔。
網上也有很多關於with的用法的好的文章。
http://www.cnblogs.com/coser/archive/2013/01/28/2880328.html
http://my.oschina.net/orangef/blog/133893
更簡潔的總結一下with的出現場景:
1. with ClassXX() (as objXX):
這種場景 ClassXX()是一個類,類的實現中要有__init__(), __enter__(),__exit__()
其中__enter__()中會return 一個對象 作爲objXX
這樣執行書序爲
__init__
__enter__
with 代碼塊
__exit__
2. 第一種方法的增強版。因爲第一中場景,with後面一般是類,需要我們去實現__init__等方法,爲了簡化實現,誕生了第二種場景。基於函數的with用法
@contextlib.contextmanager
def
funA()
:
。。。//1
yield
{}//
{}爲with as objXX中的objXX
。。。//3
這樣with funA():
//2
執行的順序爲(不出error)
1
2
3