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

首頁 > 編程 > Python > 正文

Python中的上下文管理器和with語句的使用

2020-02-22 23:42:37
字體:
來源:轉載
供稿:網友

Python2.5之后引入了上下文管理器(context manager),算是Python的黑魔法之一,它用于規定某個對象的使用范圍。本文是針對于該功能的思考總結。

為什么需要上下文管理器?

首先,需要思索下為什么需要引入上下文管理器。

在正常情況下,管理各種系統資源(如文件)、數據庫連接時,通常是先打開這些資源,執行完相應的業務邏輯,最后關閉資源。

舉兩個例子:

1.使用Python打開一個文件寫入內容,之后需要關閉這個文件。如果不正常關閉的話可能會在文件操作時出現異常,因為系統允許你打開的文件的最大數是有限的。

2.在數據庫連接時也是存在類似問題,數據庫的連接算是一種比較昂貴的資源,若連接過多而沒有及時關閉的話,就可能出現不能繼續連接的異常錯誤。

但是,很多程序員經常會忘記關閉文件,或者關閉數據庫的連接。這時候就引入了上下文管理器,它可以在你不需要該對象的時候,自動關閉它。

上下文管理器怎么使用?

上下文管理器的語法是:with...as...

實例:文件操作

print "不使用上下文管理器"print "*" * 30f = open('file.py', 'w')print f.closedf.write("# Hello World")f.close()print f.closedprint "/n使用上下文管理器"print "*" * 30with open("file.py", 'w') as f:  print f.closed  f.write('# Hello Python')print f.closed

這里通過.closed比較,我們可以看到上下文管理器可以自動關閉文件,對于上下文管理器而言,有隸屬于它的程序塊,當隸屬于它的程序塊執行結束的時候(判斷縮進),上下文管理器將自動關閉文件。
 上述實例,也可以使用try...except...來實現,同樣可以很直觀的看到使用with...as...語句之后,代碼確實相對更加簡潔。

上下文管理實現機制

因為文件對象是Python的內置對象,內置了上下文管理的特殊方法,所以它可以使用with語句。在Python中,任何對象,只要實現了上下文管理,就可以使用with語句,實現上下文管理需要通過__enter__和__exit__這兩個方法來實現。

關于這兩個方法:

    enter(self):進入該對象時調用此方法,返回值將放入with...as...語句中的as說明的變量中 exit(self, type, value, tb):離開上下文管理器時調用該方法,如果有異常出現,返回False,type、value和tb將分別表示異常的類型、值和追蹤信息,傳遞出上下文顯示;如果沒有異常,則三個變量的值均為None。

with 上下文管理器:
    語法體

當with語句遇到上下文管理器時,就會在執行語法體之前,先執行__enter__方法,然后再執行語法體,執行完語法體之后,執行__exit__方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 棋牌| 莱州市| 江陵县| 山东| 兴义市| 新民市| 获嘉县| 韶关市| 达孜县| 个旧市| 唐海县| 淳安县| 泉州市| 兴化市| 洪洞县| 裕民县| 成都市| 永城市| 平定县| 三原县| 宜城市| 吴桥县| 易门县| 广丰县| 渭南市| 阿瓦提县| 中牟县| 富平县| 长武县| 轮台县| 嫩江县| 高密市| 东港市| 南通市| 寿宁县| 陈巴尔虎旗| 布拖县| 平果县| 五台县| 凭祥市| 融水|