成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

上下文管理器和 else 塊

bbbbbb / 1066人閱讀

摘要:上下文管理器和塊上下文管理器協(xié)議包含和兩個方法。語句運行結(jié)束后,會在上下文管理器對象上調(diào)用方法,以此扮演子句的角色。

上下文管理器

最終,上下文管理器可能幾乎與子程序(subroutine)本身一樣重要。

在各種語言中 with 語句的作用不同,而且做的都是簡單的事,雖然可以避免不
斷使用點號查找屬性,但是不會做事前準(zhǔn)備和事后清理。

if語句之外的else塊

else太個性了, 其他語言不同用 不用這個

兩個風(fēng)格 EAFP 這種就得看好哪個else語句了

  取得原諒比獲得許可容易(easier to ask for forgiveness than permission)。這是一
種常見的 Python 編程風(fēng)格,先假定存在有效的鍵或?qū)傩?,如果假定不成立,那么?br>獲異常。這種風(fēng)格簡單明快,特點是代碼中有很多 try 和 except 語句。與其他很多
語言一樣(如 C 語言),這種風(fēng)格的對立面是 LBYL 風(fēng)格。
接下來,詞匯表定義了 LBYL。

LBYL 先用這個吧

  三思而后行(look before you leap)。這種編程風(fēng)格在調(diào)用函數(shù)或查找屬性或鍵
之前顯式測試前提條件。與 EAFP 風(fēng)格相反,這種風(fēng)格的特點是代碼中有很多 if 語
句。在多線程環(huán)境中,LBYL 風(fēng)格可能會在“檢查”和“行事”的空當(dāng)引入條件競爭。例
如,對 if key in mapping: return mapping[key] 這段代碼來說,如果在測試
之后,但在查找之前,另一個線程從映射中刪除了那個鍵,那么這段代碼就會失敗。
這個問題可以使用鎖或者 EAFP 風(fēng)格解決。

上下文管理器和with塊

上下文管理器協(xié)議包含 enterexit 兩個方法。with 語句開始運行時,會在上下文管理器對象上調(diào)用 enter 方法。

with 語句運行結(jié)束后,會在上下文管理器對象上調(diào)用 exit 方法,以此扮演 finally 子句的角色。

class LookingGlass:
    def __enter__(self):
        import sys
        self.original_write = sys.stdout.write
        sys.stdout.write = self.reverse_write
        return "JABBERWOCKY"

    def reverse_write(self, text):
        self.original_write(text[::-1])

    def __exit__(self, exc_type, exc_value, traceback):
        import sys
        sys.stdout.write = self.original_write
        if exc_type is ZeroDivisionError:
            print("Please DO NOT divide by zero!")
        return True

? 如果一切正常,Python 調(diào)用 exit 方法時傳入的參數(shù)是 None, None, None;如
果拋出了異常,這三個參數(shù)是異常數(shù)據(jù),如下所述。

解釋器調(diào)用 enter 方法時,除了隱式的 self 之外,不會傳入任何參數(shù)。傳給
exit 方法的三個參數(shù)列舉如下。

exc_type
異常類(例如 ZeroDivisionError)。

exc_value
  異常實例。有時會有參數(shù)傳給異常構(gòu)造方法,例如錯誤消息,這些參數(shù)可以使用exc_value.args 獲取。

traceback
  traceback 對象。

@contextmanager 裝飾器 哥還是寫全的吧

能減少創(chuàng)建上下文管理器的樣板代碼量,因為不用編寫一個完整的類,定義 enterexit 方法,

而只需實現(xiàn)有一個 yield 語句的生成器,生成想讓 enter 方法返回的值。

總結(jié)
else 不要用python哪個沒朋友的 神奇else (不過要看懂)
上下文 with

def __enter__(self): 一般返回 self自己

def __exit__(self, exc_type, exc_value, traceback):

exc_type
異常類(例如 ZeroDivisionError)。

exc_value
  異常實例。有時會有參數(shù)傳給異常構(gòu)造方法,例如錯誤消息,這些參數(shù)可以使用exc_value.args 獲取。

traceback
  traceback 對象。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42065.html

相關(guān)文章

  • Python中的下文管理器和else

    摘要:上下文管理器協(xié)議包含和兩個方法。因此必要時在上下文管理器函數(shù)中使用語句防范錯誤。構(gòu)建臨時忽略指定異常的上下文管理器。這是個基類,用于定義基于類的上下文管理器。塊結(jié)束時,按照后進先出的順序調(diào)用棧中各個上下文管理器的方法。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點: 1、掌握if語句之外的el...

    Michael_Lin 評論0 收藏0
  • Python入門學(xué)習(xí)筆記匯總

    摘要:導(dǎo)語本文章匯總了本人在學(xué)習(xí)基礎(chǔ)之緒論篇數(shù)據(jù)結(jié)構(gòu)篇函數(shù)篇面向?qū)ο笃刂屏鞒唐驮幊唐獙W(xué)習(xí)筆記的鏈接,打算入門的朋友們可以按需查看并交流。 導(dǎo)語:本文章匯總了本人在學(xué)習(xí)Python基礎(chǔ)之緒論篇、數(shù)據(jù)結(jié)構(gòu)篇、函數(shù)篇、面向?qū)ο笃?、控制流程篇和元編程篇學(xué)習(xí)筆記的鏈接,打算入門Python的朋友們可以按需查看并交流。 第一部分:緒論篇 1、Python數(shù)據(jù)模型 第二部分:數(shù)據(jù)結(jié)構(gòu)篇 2、序列構(gòu)成...

    U2FsdGVkX1x 評論0 收藏0
  • 生成器進化到協(xié)程 Part 2

    摘要:一個典型的上下文管理器類如下處理異常正如方法名明確告訴我們的,方法負(fù)責(zé)進入上下的準(zhǔn)備工作,如果有需要可以返回一個值,這個值將會被賦值給中的??偨Y(jié)都是關(guān)于上下文管理器的內(nèi)容,與協(xié)程關(guān)系不大。 Part 1 傳送門 David Beazley 的博客 PPT 下載地址 在 Part 1 我們已經(jīng)介紹了生成器的定義和生成器的操作,現(xiàn)在讓我們開始使用生成器。Part 2 主要描述了如...

    fuyi501 評論0 收藏0
  • 類加載器和類的加載過程

    摘要:只有當(dāng)父加載器無法完成加載的時候,子加載器才會嘗試自己加載。破壞雙親委托機制實現(xiàn)熱部署 類加載器: 負(fù)責(zé)將生成的.class文件加載到內(nèi)存中,并生成對應(yīng)的Class對象 三種類加載器: BootStrapClassLoader:引導(dǎo)類加載器,負(fù)責(zé)java核心類的加載 ExtensionClassLoader: 擴展類加載器 AppClassLoader:應(yīng)用類加...

    baiy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<