国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python高級語法:with語句和上下文管理器

這篇具有很好參考價值的文章主要介紹了Python高級語法:with語句和上下文管理器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一.文件操作: open寫法

1.文件操作說明:

①文件使用完后必須關(guān)閉。

②因文件對象會占用操作系統(tǒng)的資源,并且操作系統(tǒng)同一時間能打開的文件數(shù)量也是有限的。

例如:?

# 1.以寫的方式打開文件
f = open('python.txt', 'w', encoding = 'utf-8')
# 2.寫入文件內(nèi)容
f.write('人生苦短,我學(xué)python!!')
# 3.關(guān)閉文件
f.close()
2. 存在的安全隱患:

① 由于文件讀寫時都有可能產(chǎn)生IOError,一旦出錯,后面的f.close()就不會調(diào)用。

例如:

# 1.以讀的方式打開文件
f = open('python.txt', 'r', encoding = 'utf-8')
# 2.寫入文件內(nèi)容
f.read()
# 3.關(guān)閉文件
f.close()

運行結(jié)果:Python高級語法:with語句和上下文管理器,python

3.try…except…finally解決文件操作異常:

①為了保證無論是否出錯都能正確地關(guān)閉文件,我們可以使用try ... finally來解決。?

②但是,try-except-finally語句缺點:代碼過于冗長, 不易用,易忘。

例如:

try:
    # 1.嘗試執(zhí)行的代碼
    f = open("python.txt", 'r', encoding='utf-8')
    print(f.read())
except IOError as e:
    # 2.出問題后的解決方案, 文件不存在就創(chuàng)建
    f = open("python.txt", 'w', encoding='utf-8')
finally:
    # 3.釋放資源.
    f.close()

二.with語句

1.上下文管理器with語句:

該機制簡單、更安全的處理資源和異常。

2.特點:

with 語句執(zhí)行完成后,自動調(diào)用關(guān)閉文件操作,即使出現(xiàn)異常也會自動調(diào)用關(guān)閉文件操作。

# 1、以寫的方式打開文件
with open("python.txt", "w", encoding='utf-8') as f:
    # 2、讀取文件內(nèi)容
    f.write("人生苦短,我學(xué)python!!")

三.上下文管理器原理

1.概述:

一個類只要實現(xiàn)了__enter__()和__exit__()這個兩個方法,通過該類創(chuàng)建的對象我們就稱之為上下文管理器。

2.原理:

上下文管理器可以使用 with 語句,with語句之所以這么強大,背后是由上下文管理器做支撐的。 剛才使用 open 函數(shù)創(chuàng)建的文件對象就是就是一個上下文管理器對象。 ?

大白話:with 管理的對象就是上下文管理器, with xxx as 后面的操作的對象就是被管理的對象。

例如:

# 1. 自定義上下文管理器類.
class MyFile:
    # 2. 重寫 __init__()魔法方法, 初始化: file_name(文件名), file_model(文件模型)
    def __init__(self, file_name, file_model):
        """
        初始化屬性的.
        :param file_name:   文件名
        :param file_model:  文件(操作)模型, r:只讀, w:只寫, a:追加
        """
        self.file_name = file_name
        self.file_model = file_model
        self.fp = None      # fp代表的文件對象.

    # 3. 重寫 __enter__()函數(shù), 表示: 上文. 即: with語句執(zhí)行前, 做的事兒.
    def __enter__(self):
        print('這個是上文, 初始化屬性的!')
        self.fp = open(self.file_name, self.file_model, encoding='utf-8')
        return self.fp    # fp就是文件對象.

    # 4. 重寫 __exit__()函數(shù), 表示: 下文, 即: with語句執(zhí)行完畢后, 做的事兒.
    def __exit__(self, exc_type, exc_val, exc_tb): # 這些參數(shù)一個也用不到
        print('這個是下文, 釋放資源的!')
        self.fp.close()

# # 5. 演示with open()語法, __enter__()返回的是: 文件對象
with MyFile('./1.txt', 'r') as fp:    # fp就是上邊的 fp屬性, 代表這文件對象.
    # 這里的內(nèi)容執(zhí)行完畢后, 會被自動釋放資源.
    print('123')
    print(fp.read())

運行結(jié)果

Python高級語法:with語句和上下文管理器,python文章來源地址http://www.zghlxwxcb.cn/news/detail-763673.html

3.技術(shù)細節(jié)
  • 一個類只要實現(xiàn)了__enter__()和__exit__()這個兩個方法,通過該類創(chuàng)建的對象我們就稱之為上下文管理器
  • _enter__表示上文方法,需要返回一個操作文件對象
  • __exit__表示下文方法,with語句執(zhí)行完成會自動執(zhí)行,即使出現(xiàn)異常也會執(zhí)行該方法

到了這里,關(guān)于Python高級語法:with語句和上下文管理器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python教程(27)——如何使用Python中的上下文管理器

    當(dāng)我們在編寫代碼時,經(jīng)常會遇到需要管理資源的情況,比如打開和關(guān)閉文件,如果遇到了一些異常情況,我們需要關(guān)閉資源,不然會導(dǎo)致資源泄露,雖然我們可以通過手動的方式來關(guān)閉,但如果有多個異常情況需要考慮的話,萬一不小心漏了一處,就芭比Q了。所以,如果有

    2024年02月19日
    瀏覽(24)
  • 【 Python 全棧開發(fā) - WEB開發(fā)篇 - 38 】property和上下文管理器

    Python 是一個簡潔而強大的編程語言,通過提供各種特性和工具,使開發(fā)人員能夠更高效地進行編程。其中一個非常有用的特性是 @property 裝飾器,它允許我們在類中定義屬性并自定義其行為。 @property 裝飾器用于將一個方法轉(zhuǎn)換為類的屬性。使用 @property 裝飾器,我們可以像訪

    2024年02月13日
    瀏覽(36)
  • 無限上下文,多級內(nèi)存管理!突破ChatGPT等大語言模型上下文限制

    無限上下文,多級內(nèi)存管理!突破ChatGPT等大語言模型上下文限制

    目前,ChatGPT、Llama 2、文心一言等主流大語言模型,因技術(shù)架構(gòu)的問題上下文輸入一直受到限制,即便是Claude 最多只支持10萬token輸入,這對于解讀上百頁報告、書籍、論文來說非常不方便。 為了解決這一難題,加州伯克利分校受操作系統(tǒng)的內(nèi)存管理機制啟發(fā),提出了MemGPT。

    2024年02月06日
    瀏覽(26)
  • 【python】flask執(zhí)行上下文context,請求上下文和應(yīng)用上下文原理解析

    【python】flask執(zhí)行上下文context,請求上下文和應(yīng)用上下文原理解析

    ?? 歡迎大家來到景天科技苑?? ???? 養(yǎng)成好習(xí)慣,先贊后看哦~???? ?? 作者簡介:景天科技苑 ??《頭銜》:大廠架構(gòu)師,華為云開發(fā)者社區(qū)專家博主,阿里云開發(fā)者社區(qū)專家博主,CSDN新星創(chuàng)作者,掘金優(yōu)秀博主,51CTO博客專家等。 ??《博客》:Python全棧,前后端開

    2024年03月26日
    瀏覽(22)
  • Zustand 和 React 上下文狀態(tài)管理

    Zustand 和 React 上下文狀態(tài)管理

    Zustand 是客戶端全局狀態(tài)管理的一個很棒的庫。它簡單、快速,并且包大小小。然而,有一件事我不一定喜歡它:這些 Store 是全局性的。 但這不是全局狀態(tài)管理的重點嗎?要使該狀態(tài)在您的應(yīng)用程序中隨處可用。不過當(dāng)我回顧過去幾年中使用 zustand 的情況時,我意識到,更多

    2024年04月25日
    瀏覽(22)
  • pymysql 上下文管理器控制事務(wù)提交和回滾

    示例: 從上面例子看出, 在with結(jié)構(gòu)進入時,事務(wù)開始begin 在with結(jié)構(gòu)退出時,會根據(jù)是否產(chǎn)生異常進行commit和rollback操作,并關(guān)閉連接

    2024年01月25日
    瀏覽(29)
  • (二十)Flask之上下文管理第一篇(粗糙縷一遍源碼)

    (二十)Flask之上下文管理第一篇(粗糙縷一遍源碼)

    ????作者介紹:【孤寒者】—CSDN全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、HDZ核心組成員、華為云享專家Python全棧領(lǐng)域博主、CSDN原力計劃作者 ???? 本文已收錄于Flask框架從入門到實戰(zhàn)專欄 :《Flask框架從入門到實戰(zhàn)》 ???? 熱門專欄推薦 :《Python全棧系列教程》、《Django框架從入門到實戰(zhàn)

    2024年01月19日
    瀏覽(23)
  • 超長上下文處理:基于Transformer上下文處理常見方法梳理

    超長上下文處理:基于Transformer上下文處理常見方法梳理

    原文鏈接:芝士AI吃魚 目前已經(jīng)采用多種方法來增加Transformer的上下文長度,主要側(cè)重于緩解注意力計算的二次復(fù)雜度。 例如,Transformer-XL通過緩存先前的上下文,并允許隨著層數(shù)的增加線性擴展上下文。Longformer采用了一種注意力機制,使得token稀疏地關(guān)注遠距離的token,從而

    2024年02月13日
    瀏覽(24)
  • 從零開始理解Linux中斷架構(gòu)(7)--- Linux執(zhí)行上下文之中斷上下文

    從零開始理解Linux中斷架構(gòu)(7)--- Linux執(zhí)行上下文之中斷上下文

    ????????當(dāng)前運行的loop是一條執(zhí)行流,中斷程序運行開啟了另外一條執(zhí)行流,從上一節(jié)得知這是三種跳轉(zhuǎn)的第三類,這個是一個大跳轉(zhuǎn)。對中斷程序的基本要求就是 中斷執(zhí)行完畢后要恢復(fù)到原來執(zhí)行的程序 ,除了時間流逝外,原來運行的程序應(yīng)該毫無感知。 ???????

    2024年02月11日
    瀏覽(41)
  • 〖大前端 - 基礎(chǔ)入門三大核心之JS篇(51)〗- 面向?qū)ο笾J識上下文與上下文規(guī)則

    〖大前端 - 基礎(chǔ)入門三大核心之JS篇(51)〗- 面向?qū)ο笾J識上下文與上下文規(guī)則

    說明:該文屬于 大前端全棧架構(gòu)白寶書專欄, 目前階段免費 , 如需要項目實戰(zhàn)或者是體系化資源,文末名片加V! 作者:哈哥撩編程,十余年工作經(jīng)驗, 從事過全棧研發(fā)、產(chǎn)品經(jīng)理等工作,目前在公司擔(dān)任研發(fā)部門CTO。 榮譽: 2022年度博客之星Top4、2023年度超級個體得主、谷

    2024年02月05日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包