python中的with與@contextlib.contextmanager

在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
  只要函數定義有yield,按照以上方式來定義,就可以使用with funA():

 這樣with funA():

         //2

執行的順序爲(不出error)

     1

     2

     3


   

    





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章