flask中的with語句

  1. 上下文協議:在python中,實現了__enter__和__exit__這兩個方法的對象也就是實現了上下文協議(只有實現了上下文協議的對象纔可以使用with語句)。
  2. 上下文管理器:實現了上下文協議的對象又稱作上下文管理器。
  3. 用法:
    (1)舉例:在操作數據庫時,首先連接數據庫,其次處理sql語句,最後釋放資源。那麼利用with語句可以將連接數據庫放在__enter__方法中,操作sql放在with語句代碼塊中,釋放資源放在__exit__方法中。
    (2)代碼示例
class Test():
    def __enter__(self):
        print('進入enter方法')

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('進入exit方法')

with Test() as obj:
    print('進入業務方法')
進入enter方法
進入業務方法
進入exit方法

在這裏,可以簡單理解with語句的基本用法;但是with語句中as後面的obj並不是上下文管理器,而是__enter__方法中所返回的對象,如下:

class Test():
    def __enter__(self):
        a = 1
        print('進入enter方法')
        return a

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('進入exit方法')

with Test() as obj:
    print('進入業務方法')
    print(obj)
進入enter方法
進入業務方法
1
進入exit方法

由此可見 as後面的obj對象其實就是__enter__方法中所返回的對象。

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