今天就跟大家聊聊有關(guān)python中上下文管理器的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)南昌縣免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
1、云計算,典型應(yīng)用OpenStack。2、WEB前端開發(fā),眾多大型網(wǎng)站均為Python開發(fā)。3.人工智能應(yīng)用,基于大數(shù)據(jù)分析和深度學(xué)習(xí)而發(fā)展出來的人工智能本質(zhì)上已經(jīng)無法離開python。4、系統(tǒng)運維工程項目,自動化運維的標(biāo)配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數(shù)據(jù)分析。
1、原理
with實際上是python中的關(guān)鍵字,它可以開啟一個對象的上下文管理器協(xié)議,實際上,在文件操作時,并不是不需要寫文件的關(guān)閉,而是文件的關(guān)閉操作在 with 的上下文管理器中的協(xié)議方法里已經(jīng)寫好了。當(dāng)文件操作執(zhí)行完成后, with語句會自動調(diào)用上下文管理器里的關(guān)閉語句來關(guān)閉文件資源。
2、注意
上下文管理器一定能夠保證退出步驟的執(zhí)行。如果進(jìn)入上下文管理器,根據(jù)定義,一定會有退出步驟。即使內(nèi)部的代碼拋出異常,這點也成立。事實上,如果退出步驟處理合適,那么上下文管理器的退出代碼為處理這類異常提供一個機會(雖然不強制要求一定要處理異常)。
3、實例
class TestContext: def __enter__(self): print('__enter__') return 1 def __exit__(self, exc_type, exc_value, exc_tb): print('exc_type: %s' % exc_type) print('exc_value: %s' % exc_value) print('exc_tb: %s' % exc_tb) with TestContext() as t: print('t: %s' % t) # Output: # __enter__ # t: 1 # exc_type: None # exc_value: None # exc_tb: None
在這個例子中,我們定義了 TestContext 類,它分別實現(xiàn)了 __enter__ 和 __exit__ 方法。
這樣一來,我們就可以把 TestContext 當(dāng)做一個「上下文管理器」來使用,也就是通過 with TestContext() as t 方式來執(zhí)行。
從輸出結(jié)果我們可以看到,具體的執(zhí)行流程如下:
__enter__ 在進(jìn)入 with 語句塊之前被調(diào)用,這個方法的返回值賦給了 with 后的 t 變量;
__exit__ 在執(zhí)行完 with 語句塊之后被調(diào)用。
看完上述內(nèi)容,你們對python中上下文管理器的原理是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。