91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎么用Python實現with上下文管理器

發布時間:2022-01-17 17:27:37 來源:億速云 閱讀:180 作者:iii 欄目:互聯網科技

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

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

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

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

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

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

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

使用enter和exit實現(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塊錢')

返回結果:

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

使用enter和exit實現(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')

運行結果:

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

使用contextlib實現

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上下文管理器”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新余市| 云霄县| 尉氏县| 万山特区| 武威市| 大荔县| 临桂县| 黄梅县| 丰县| 岑溪市| 天祝| 油尖旺区| 和平县| 朝阳区| 清流县| 吴堡县| 根河市| 桐城市| 平塘县| 高要市| 青川县| 白玉县| 清远市| 平顶山市| 宜宾县| 上高县| 丽水市| 武川县| 东城区| 榕江县| 鹤岗市| 绥德县| 神农架林区| 湖口县| 沧州市| 三穗县| 汾阳市| 惠东县| 阿克苏市| 玉林市| 西贡区|