您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用Python實現with上下文管理器”,在日常操作中,相信很多人在怎么用Python實現with上下文管理器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python實現with上下文管理器”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
with上下文管理器,這個用過很多次,比如在執行mysql語句的時候要先鏈接數據庫,獲取游標,執行sql語句,關閉連接。又或者是文本內容的讀寫,打開文本寫入內容關閉文本。
如果每次執行一條語句都要做這么多操作,就會產生大量重復的代碼,這個時候使用上下文管理器即可美觀又輕松的解決這個問題。
with管理上下文的作用是對一些重復的代碼簡單化,并且能優化try/except/finally的寫法。
上下文的實現是通過兩個魔法函數enter和exit實現,后來更新再造后,使用contextlib提供的API可以更加方便的完成。
概念和功能都明白后,最重要的還是如何實現。
舉個例子:浪子去買貓餅干,每次買的時候都要做這些動作,掏出錢包,花出x元,收回錢包。每次都要重復掏錢包收錢包這個動作有些麻煩,并且萬一忘了掏錢包就不能付錢,忘了收錢包的話,錢包就掉了。每次掏錢包收錢包都要寫代碼,有啥簡介的方式嘛?
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塊錢')
返回結果:
langzi放心大膽的掏出了錢包
花了600塊錢
langzi小心翼翼的收起來錢包
當然也可以這么寫:
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')
運行結果:
浪子放心大膽的掏出了錢包
浪子花了600元
浪子小心翼翼的收起來錢包
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塊錢')
返回結果:
langzi十分放心大膽的掏出錢包
花了1塊錢
langzi萬分謹慎的收起了錢包
到此,關于“怎么用Python實現with上下文管理器”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。