chapter15 上下文管理器和else塊

主要討論:

  • with 語(yǔ)句和上下文管理器
  • for抚岗、while 和try語(yǔ)句的else子句

if語(yǔ)句之外的else塊

else子句不僅能夠在if語(yǔ)句中使用,還能在for, while, try語(yǔ)句中使用.

  • for: 僅當(dāng)for循環(huán)運(yùn)行完畢時(shí)才執(zhí)行else塊.
  • while: 僅當(dāng)while循環(huán)因?yàn)闂l件為假值而退出時(shí)才運(yùn)行else塊.
  • try: 僅當(dāng)try塊中沒(méi)有異常拋出時(shí)才運(yùn)行else塊.

上下文管理器和with塊

上下文管理器協(xié)議包含__enter____exit__兩個(gè)方法.
with語(yǔ)句在開(kāi)始運(yùn)行時(shí),會(huì)在上下文管理器對(duì)象上調(diào)用__enter__方法,結(jié)束后會(huì)調(diào)用__exit__方法. 用__exit__方法扮演finally子句的角色.

contextlib模塊中的實(shí)用工具

  • closing:如果對(duì)象提供了close()方法熄捍,但沒(méi)有實(shí)現(xiàn)__enter__/__exit__協(xié)議列敲。可以使用這個(gè)函數(shù)構(gòu)造上下文管理器台丛。
  • suppress:構(gòu)建臨時(shí)忽略指定異常的上下文管理器
  • @contextmanager: 這個(gè)裝飾器把簡(jiǎn)單的生成器函數(shù)變成了上下文管理器耍缴,這樣就不用創(chuàng)建類(lèi)去實(shí)現(xiàn)管理器協(xié)議了。
  • ContextDecorator: 基類(lèi)挽霉,用于定義基于類(lèi)的上下文管理器防嗡。
  • ExitStack:這個(gè)上下文管理器能夠進(jìn)入多個(gè)上下文管理器。with塊結(jié)束時(shí)侠坎,ExitStack按照后進(jìn)先出的順序調(diào)用棧中各個(gè)上下文管理器的__exit__方法蚁趁。

使用@contextmanager

在使用該裝飾器的生成器中,yield語(yǔ)句的作用是把函數(shù)的定義體分為兩部分: yield語(yǔ)句前面的所有代碼在with塊開(kāi)始時(shí)執(zhí)行(__enter__方法),yield后面的代碼在with塊結(jié)束時(shí)運(yùn)行(__exit__方法).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末实胸,一起剝皮案震驚了整個(gè)濱河市他嫡,隨后出現(xiàn)的幾起案子番官,更是在濱河造成了極大的恐慌,老刑警劉巖钢属,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徘熔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淆党,警方通過(guò)查閱死者的電腦和手機(jī)酷师,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)染乌,“玉大人窒升,你說(shuō)我怎么就攤上這事∧浇常” “怎么了饱须?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)台谊。 經(jīng)常有香客問(wèn)我蓉媳,道長(zhǎng),這世上最難降的妖魔是什么锅铅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任酪呻,我火速辦了婚禮,結(jié)果婚禮上盐须,老公的妹妹穿的比我還像新娘玩荠。我一直安慰自己,他們只是感情好贼邓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布阶冈。 她就那樣靜靜地躺著,像睡著了一般塑径。 火紅的嫁衣襯著肌膚如雪女坑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天统舀,我揣著相機(jī)與錄音匆骗,去河邊找鬼。 笑死誉简,一個(gè)胖子當(dāng)著我的面吹牛碉就,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闷串,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓮钥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起骏庸,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎年叮,沒(méi)想到半個(gè)月后具被,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡只损,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年一姿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跃惫。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叮叹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爆存,到底是詐尸還是另有隱情蛉顽,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布先较,位于F島的核電站携冤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闲勺。R本人自食惡果不足惜曾棕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菜循。 院中可真熱鬧翘地,春花似錦、人聲如沸癌幕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)勺远。三九已至臭杰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谚中,已是汗流浹背渴杆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宪塔,地道東北人磁奖。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像某筐,于是被迫代替她去往敵國(guó)和親比搭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容