国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python 上下文管理器及自定義原理解析

2020-02-15 21:30:14
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了python 上下文管理器原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Python 提供了 with 語法用于簡化資源操作的后續清除操作,是 try/finally 的替代方法,實現原理建立在上下文管理器之上。

Python 提供了一個 contextmanager 裝飾器,更進一步簡化上下管理器的實現方式。

上下文管理器是Python2.5之后才出現的概念。上下文管理器規定了某個對象的使用范圍,當進入或者離開了使用范圍,都會有相應的一些調用,比如代碼塊開始時執行一些準備,代碼塊結束時結束一些操作。它更多的是用于資源的分配和釋放上,即在開始時分配資源,結束時釋放一些資源。比如在執行數據庫查詢時要建立連接,查詢結束后要釋放連接;寫文件時要先打開文件,寫結束后,要關閉文件等等。還有,就是資源的加鎖和解鎖,比如在使用多線程時,可能會用到加鎖和解鎖。

上下文管理器可以通過使用更可讀、更精簡的代碼實現資源的分配與釋放。
復制代碼

with的使用

對于上下文管理器的使用,最常見的是使用with語句,with語句可構建資源的分配與釋放的語法糖。

因為with語句就是為支持上下文管理器而存在的,使用上下文管理協議的方法包裹一個代碼塊(with語句體)的執行,并為try...except...finally提供了一個方便使用的封裝。

一般語法:

def load_data(filename):  f = file(filename,'w')  try:   f.write('test file')  finally:   f.close()

使用with:

# 使用withwith open('test.txt', 'w') as f:  f.write('Python')

通過 with 語句在編寫代碼時,會使代碼變得更加簡潔,不用再去關閉文件。

我們并不需要寫文件的關閉操作,文件會在使用完后自動關閉。

with的執行原理

實際上,在文件操作時,并不是不需要寫文件的關閉,而是文件的關閉操作在 with 的上下文管理器中的協議方法里已經寫好了。當文件操作執行完成后, with語句會自動調用上下文管理器里的關閉語句來關閉文件資源。

上下文管理協議(context management protocol)
ContextManager ,上下文是 context 直譯的叫法,在程序中用來表示代碼執行過程中所處的前后環境。

上下文管理器中有 __enter__ 和 __exit__ 兩個方法,以with為例子,__enter__ 方法會在執行 with 后面的語句時執行,一般用來處理操作前的內容。比如一些創建對象,初始化等;__exit__ 方法會在 with 內的代碼執行完畢后執行,一般用來處理一些善后收尾工作,比如文件的關閉,數據庫的關閉等。

上下文管理協議包括兩個方法:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹寨县| 临高县| 富源县| 镇坪县| 巴林右旗| 惠来县| 会昌县| 彭泽县| 普定县| 新疆| 土默特右旗| 香格里拉县| 洮南市| 淮安市| 佳木斯市| 永清县| 鲁甸县| 阳春市| 上蔡县| 河西区| 营山县| 临邑县| 格尔木市| 沐川县| 德阳市| 印江| 邵阳县| 甘肃省| 德昌县| 当阳市| 双城市| 奉贤区| 灌云县| 石楼县| 皮山县| 衢州市| 灌南县| 额尔古纳市| 民和| 马关县| 天全县|