亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

深入淺析python with語句簡介

發布時間:2020-09-20 17:21:59 來源:腳本之家 閱讀:103 作者:John_Lan_2008 欄目:開發技術

with 語句是從 Python 2.5 開始引入的一種與異常處理相關的功能(2.5 版本中要通過 from __future__ import with_statement 導入后才可以使用),從 2.6 版本開始缺省可用(參考 What's new in Python 2.6? 中 with 語句相關部分介紹)。with 語句適用于對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如文件使用后自動關閉、線程中鎖的自動獲取和釋放等。

術語

要使用 with 語句,首先要明白上下文管理器這一概念。有了上下文管理器,with 語句才能工作。

在python中讀寫操作資源,最后需要釋放資源。可以使用try…finally結構實現資源的正確釋放,python提供了一個with語句能更簡便的實現釋放資源。

1. python像文件的操作open等已經可以直接使用with語句

2. 可以自定義一個支持with語句對象

3. 使用contextlib也可以使用with語句對象

4. 針對需要close操作的對象with的使用

示例代碼中有4種使用標注

# 自定義支持with語句的對象
class DummyRes:
  def __init__(self, tag):
    self.tag = tag
  def __enter__(self):
    print("Enter >>> {}".format(self.tag))
    return self
  def __exit__(self, exc_type, exc_value, exc_tb):
    print("Exit <<< {}".format(self.tag))
    if exc_tb is None:
      print("Exit without Exception {}".format(self.tag))
      return False
    else:
      print("Exit with Exception {}".format(self.tag))
      return True
# 支持closing 上下文with語句對象
class Closing:
  def __init__(self, thing):
    self.thing = thing
  def __enter__(self):
    return self
  def __exit__(self, exc_type, exc_value, exc_tb):
    self.thing.close()
class ClosingDemo:
  def __init__(self):
    self.acquire()
  def acquire(self):
    print("Acquire RES")
  def close(self):
    print("Close RES")
from contextlib import contextmanager
class ContextDemo:
  def __init__(self):
    print("Context Demo init")
    raise Exception
    print("Context Demo init")
  def print(self):
    print("Context Demo print 1")
    #raise Exception
    print("Context Demo print 2")
  def close(self):
    print("Context Demo close")
def context_demo():
  print("context demo in")
  raise Exception
  print("context demo out")
@contextmanager
def demo():
  print("Allocate Resoures")
  try:
    yield context_demo
  finally:
    print("raise exception")
  #yield "*** contextmanager demo ***"
  print("Free Resoures")
if __name__ == "__main__":
  # 1. 使用with語句 (自動關閉文件)
  with open("test.txt", "w") as f:
    f.write("write test")
  # 2. 自動定義with語句
  with DummyRes("test") as res:
    print("With body 1")
    raise Exception
    print("With body 2")
  # 3. 利用contextlib定義with語句
  with demo():
    print("exc demo")
  # 4. closing 上下文 (適合有close操作的情況)
  with Closing(ClosingDemo()):
    print("Use Resoures")

總結

以上所述是小編給大家介紹的python with語句簡介,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

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

AI

马龙县| 沿河| 崇州市| 宣城市| 巴彦淖尔市| 蓬溪县| 波密县| 怀远县| 平武县| 绥滨县| 安阳市| 灵石县| 政和县| 饶平县| 柳州市| 凤庆县| 巴青县| 白朗县| 聂拉木县| 拉萨市| 治多县| 晋宁县| 吴堡县| 广东省| 桐城市| 溧水县| 祁连县| 璧山县| 黄山市| 卢龙县| 当阳市| 抚顺市| 丹棱县| 哈尔滨市| 朝阳区| 阳信县| 昌黎县| 桐城市| 澄迈县| 长治市| 横峰县|