国产探花免费观看_亚洲丰满少妇自慰呻吟_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 內的代碼執行完畢后執行,一般用來處理一些善后收尾工作,比如文件的關閉,數據庫的關閉等。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呈贡县| 滁州市| 朝阳县| 西乌珠穆沁旗| 镇安县| 台湾省| 闻喜县| 红河县| 陈巴尔虎旗| 上饶市| 西贡区| 萝北县| 星子县| 腾冲县| 绥江县| 井研县| 兴安盟| 丰原市| 聂拉木县| 南木林县| 南阳市| 孟连| 宁陵县| 吉木乃县| 务川| 北碚区| 密云县| 扶绥县| 高邑县| 宜兴市| 灵台县| 炎陵县| 宁明县| 峡江县| 福州市| 阿荣旗| 安义县| 巧家县| 姚安县| 三河市| 庆安县|