最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python上下文管理器全實(shí)例詳解

 更新時(shí)間:2019年11月12日 16:53:23   作者:happy_code  
在本篇文章里小編給大家整理的是關(guān)于Python上下文管理器全實(shí)例解析的知識(shí)點(diǎn),需要的朋友們參考下。

Python上下文管理器

簡(jiǎn)介

最近用到這個(gè),仔細(xì)了解了一下,感覺(jué)是十分有用的,記錄一下

使用場(chǎng)景

當(dāng)我們需要獲取一個(gè)臨時(shí)打開(kāi)的資源,并在使用完畢后進(jìn)行資源釋放和異常處理,利用try-catch語(yǔ)句可以完成,舉個(gè)例子。

打開(kāi)文件:

f = None
try:
 print("try")
 f = open("__init__.py", "r")
 print(f.read())
except Exception as e:
 print("exception")
finally:
 if f:
  print("finally")
  f.close()

利用上下文管理器:

class OpenHandle:

 def __init__(self, filename, mode):
  self.filename = filename
  self.mode = mode

 def __enter__(self):
  self.f = open(self.filename, self.mode)
  return self.f

 def __exit__(self, exc_type, exc_val, exc_tb):
  if exc_type:
   print("exception")
  else:
   print("normal")
  self.f.close()

with OpenHandle("book.txt", "r") as f:
 print(f.read())

這樣可以利用with-as語(yǔ)句改寫(xiě)代碼,讓程序員關(guān)注業(yè)務(wù)主流程,去掉對(duì)于資源的獲取和關(guān)閉這些重復(fù)操作。提升代碼的可讀性。好處很大。

執(zhí)行順序

執(zhí)行順序是理解這種寫(xiě)法的關(guān)鍵:

  • 初始化,執(zhí)行handle的__init__()
  • __enter__()方法,獲取資源對(duì)象,返回給as后的變量
  • 業(yè)務(wù)代碼邏輯
  • __exit__方法,傳入3個(gè)參數(shù),異常類(lèi)型,異常對(duì)象,調(diào)用棧對(duì)象,無(wú)異常都為None
  • 拋出異?;蛘哒=Y(jié)束

函數(shù)式上下文管理器

利用from contextlib import contextmanager這個(gè)裝飾器可以將函數(shù)裝飾為上下文管理器,其實(shí)這個(gè)裝飾背后也是返回一個(gè)實(shí)現(xiàn)了__enter__和__exit__方法的類(lèi)

from contextlib import contextmanager

@contextmanager
def managed_resource(*args, **kwds):
 # Code to acquire resource, e.g.:
 resource = acquire_resource(*args, **kwds)
 try:
  yield resource
 finally:
  # Code to release resource, e.g.:
  release_resource(resource)

>>> with managed_resource(timeout=3600) as resource:
...  # Resource is released at the end of this block,
...  # even if code in the block raises an exception

模板代碼

sqlalchemy會(huì)話上下文管理器

利用這個(gè)管理sqlalchemy會(huì)話對(duì)象的獲取和釋放,控制事務(wù)是再合適不過(guò)了

class DbTransaction:

 def __init__(self, session_maker):
  self.session_maker = session_maker

 def __enter__(self):
  self.session = self.session_maker()
  return self.session

 def __exit__(self, exc_type, exc_val, exc_tb):
  if exc_type:
   self.session.rollback()
  else:
   self.session.commit()
  self.session.close()
  return False if exc_type else True

以上就是全部相關(guān)知識(shí)點(diǎn),感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。

相關(guān)文章

  • python Cartopy的基礎(chǔ)使用詳解

    python Cartopy的基礎(chǔ)使用詳解

    這篇文章主要介紹了python Cartopy的基礎(chǔ)使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 經(jīng)驗(yàn)豐富程序員才知道的8種高級(jí)Python技巧

    經(jīng)驗(yàn)豐富程序員才知道的8種高級(jí)Python技巧

    這篇文章主要介紹了經(jīng)驗(yàn)豐富程序員才知道的8種高級(jí)Python技巧,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python2寫(xiě)csv文件中文亂碼問(wèn)題及解決方法

    Python2寫(xiě)csv文件中文亂碼問(wèn)題及解決方法

    python2最大的坑在于中文編碼問(wèn)題,遇到中文報(bào)錯(cuò)首先加u,再各種encode、decode,這篇文章給大家介紹Python2寫(xiě)csv文件中文亂碼問(wèn)題及解決方法,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Python實(shí)現(xiàn)的繪制三維雙螺旋線圖形功能示例

    Python實(shí)現(xiàn)的繪制三維雙螺旋線圖形功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的繪制三維雙螺旋線圖形功能,結(jié)合實(shí)例形式分析了Python使用matplotlib、numpy模塊進(jìn)行數(shù)值運(yùn)算及圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Pandas reindex重置索引的使用

    Pandas reindex重置索引的使用

    本文主要介紹了Pandas reindex重置索引的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python短信轟炸的代碼

    Python短信轟炸的代碼

    這篇文章主要介紹了Python短信轟炸的代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python調(diào)用HEG工具批量處理MODIS數(shù)據(jù)的方法及注意事項(xiàng)

    python調(diào)用HEG工具批量處理MODIS數(shù)據(jù)的方法及注意事項(xiàng)

    這篇文章主要介紹了python調(diào)用HEG工具批量處理MODIS數(shù)據(jù)的方法,本文給大家提到了注意事項(xiàng),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python命令行引導(dǎo)用戶填寫(xiě)可用的ip地址和端口號(hào)實(shí)現(xiàn)

    python命令行引導(dǎo)用戶填寫(xiě)可用的ip地址和端口號(hào)實(shí)現(xiàn)

    這篇文章主要為大家介紹了python命令行引導(dǎo)用戶填寫(xiě)可用的ip地址和端口號(hào)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 利用Python正則表達(dá)式過(guò)濾敏感詞的方法

    利用Python正則表達(dá)式過(guò)濾敏感詞的方法

    今天小編就為大家分享一篇利用Python正則表達(dá)式過(guò)濾敏感詞的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • python?pytorch圖像識(shí)別基礎(chǔ)介紹

    python?pytorch圖像識(shí)別基礎(chǔ)介紹

    大家好,本篇文章主要講的是python?pytorch圖像識(shí)別基礎(chǔ)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論

灵石县| 平罗县| 芦溪县| 台江县| 拉孜县| 新巴尔虎右旗| 宁夏| 高唐县| 鹿邑县| 清流县| 金门县| 黔南| 西畴县| 青铜峡市| 富蕴县| 惠来县| 永和县| 那曲县| 武陟县| 沭阳县| 缙云县| 宁安市| 原平市| 昭平县| 澳门| 莆田市| 牡丹江市| 永年县| 新蔡县| 潞城市| 中牟县| 深泽县| 张家界市| 宁海县| 武隆县| 康平县| 崇阳县| 木里| 方正县| 潼南县| 日土县|