python with的用法

with 語句適用於對資源進行訪問的場合,確保無論使用過程當中是否發生異常都會執行必要的「清理」操做,釋放資源,好比文件使用後自動關閉、線程中鎖的自動獲取和釋放等。線程

with 的工做原理:code

要使用 with 語句,首先要明白上下文管理器這一律念。有了上下文管理器,with 語句才能工做。對象

下面是一組與上下文管理器和with 語句有關的概念。ip

上下文管理協議(Context Management Protocol):包含方法 __enter__() 和 __exit__(),支持資源

該協議的對象要實現這兩個方法。it

上下文管理器(Context Manager):支持上下文管理協議的對象,這種對象實現了io

__enter__() 和 __exit__() 方法。上下文管理器定義執行 with 語句時要創建的運行時上下文,class

負責執行 with 語句塊上下文中的進入與退出操做。一般使用 with 語句調用上下文管理器,原理

也能夠經過直接調用其方法來使用。方法

運行時上下文(runtime context):由上下文管理器建立,經過上下文管理器的 __enter__() 和

__exit__() 方法實現,__enter__() 方法在語句體執行以前進入運行時上下文,__exit__() 在

語句體執行完後從運行時上下文退出。with 語句支持運行時上下文這一律念。

上下文表達式(Context Expression):with 語句中跟在關鍵字 with 以後的表達式,該表達式

要返回一個上下文管理器對象。

語句體(with-body):with 語句包裹起來的代碼塊,在執行語句體以前會調用上下文管

理器的 __enter__() 方法,執行完語句體以後會執行 __exit__() 方法。

 

with的用法:

with open('words.txt') as fp:

    while True:
        line = fp.readline()
        if line:
            print line.strip()
        else:
        
            break


#咱們也能夠用with使用本身的方法

class A:
    def __enter__(self):
        print 'in enter'
        # 使用as獲取返回值
        
        return self

    def __exit__(self, e_t, e_v, t_b):
        print 'in exit'

    def show(self):
       print 'initing....'

with A() as a:
    
   print a.show()


in enter  
initing  
in exit  


#用第三方庫來實現
相關文章
相關標籤/搜索