溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用Python實現(xiàn)with上下文管理器

發(fā)布時間:2022-01-17 17:27:37 來源:億速云 閱讀:172 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“怎么用Python實現(xiàn)with上下文管理器”,在日常操作中,相信很多人在怎么用Python實現(xiàn)with上下文管理器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python實現(xiàn)with上下文管理器”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

with上下文管理器,這個用過很多次,比如在執(zhí)行mysql語句的時候要先鏈接數(shù)據(jù)庫,獲取游標,執(zhí)行sql語句,關(guān)閉連接。又或者是文本內(nèi)容的讀寫,打開文本寫入內(nèi)容關(guān)閉文本。

如果每次執(zhí)行一條語句都要做這么多操作,就會產(chǎn)生大量重復(fù)的代碼,這個時候使用上下文管理器即可美觀又輕松的解決這個問題。

with管理上下文的作用是對一些重復(fù)的代碼簡單化,并且能優(yōu)化try/except/finally的寫法。

上下文的實現(xiàn)是通過兩個魔法函數(shù)enter和exit實現(xiàn),后來更新再造后,使用contextlib提供的API可以更加方便的完成。

概念和功能都明白后,最重要的還是如何實現(xiàn)。

舉個例子:浪子去買貓餅干,每次買的時候都要做這些動作,掏出錢包,花出x元,收回錢包。每次都要重復(fù)掏錢包收錢包這個動作有些麻煩,并且萬一忘了掏錢包就不能付錢,忘了收錢包的話,錢包就掉了。每次掏錢包收錢包都要寫代碼,有啥簡介的方式嘛?

使用enter和exit實現(xiàn)(1)

class
 wallet(object):
   def __init__(self,man):
       self.man=man

   def __enter__(self):
       print(self.man + '放心大膽的掏出了錢包')

   def __exit__(self, exc_type, exc_val, exc_tb):
       print(self.man + '小心翼翼的收起來錢包')

def use_money(man):
   return wallet(man)

with use_money('langzi') as a:
   print('花了600塊錢')

返回結(jié)果:

langzi放心大膽的掏出了錢包
花了600塊錢
langzi小心翼翼的收起來錢包

使用enter和exit實現(xiàn)(2)

當然也可以這么寫:

class
 wallet(object):
   def __init__(self,man):
       self.man=man

   def __enter__(self):
       print(self.man + '放心大膽的掏出了錢包')
       return self
   # return self 這一步非常重要,作用是返回實例

   def __exit__(self, exc_type, exc_val, exc_tb):
       print(self.man + '小心翼翼的收起來錢包')

   def use_money(self,money):
       print(self.man + '花了' + money +'元')

with wallet('浪子')as a:
   a.use_money('600')

運行結(jié)果:

浪子放心大膽的掏出了錢包
浪子花了600元
浪子小心翼翼的收起來錢包

使用contextlib實現(xiàn)

import
 contextlib

@contextlib.contextmanager
def use_money(man):
   try:
       print(man + '十分放心大膽的掏出錢包')
       yield None
       # yield生成器,運行到這里會返回一個值(你隨便寫一個就行)
   finally:
       print(man + '萬分謹慎的收起了錢包')

with use_money('langzi')as a:
   print('花了1塊錢')

返回結(jié)果:

langzi十分放心大膽的掏出錢包
花了1塊錢
langzi萬分謹慎的收起了錢包

到此,關(guān)于“怎么用Python實現(xiàn)with上下文管理器”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI