您好,登錄后才能下訂單哦!
@contextmanage怎么在python中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
python的數據類型:1. 數字類型,包括int(整型)、long(長整型)和float(浮點型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運算,有兩個值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數據類型,集合中可以放任何數據類型。5. 元組,元組用”()”標識,內部元素用逗號隔開。6. 字典,字典是一種鍵值對的集合。7. 集合,集合是一個無序的、不重復的數據組合。
1、實現邏輯
(1)初始化一個 _GeneratorContextManager 類,構造方法接受了一個生成器 gen
(2)這個類實現了上下文管理器協議 __enter__ 和 __exit__
(3)執行 with 時會進入到 __enter__ 方法,然后執行這個生成器,執行時會運行到 with 語法塊內的 yield 處
(4)__enter__ 返回 yield 的結果
(5)如果 with 語法塊沒有發生異常,with 執行結束后,會進入到 __exit__ 方法,再次執行生成器,這時會運行 yield 之后的代碼邏輯
(6)如果 with 語法塊發生了異常,__exit__ 會把這個異常通過生成器,傳入到 with 語法塊內,也就是把異常拋給調用者
2、使用實例
在Python中,可以使用裝飾器 @contextmanager來簡化上下文管理器,也就是不需要定義__enter__和__exit__方法。
class MyContent: def query(self): print('query data') # 需要引入contextmanager from contextlib import contextmanager @contextmanager def make_resource(): print('first connect to resource') yield MyContent() print('close resource connection') #應用上下文管理器 with make_resource() as r: r.query()
看完上述內容,你們掌握@contextmanage怎么在python中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。