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

溫馨提示×

溫馨提示×

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

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

python中@contextmanager的使用示例

發布時間:2021-02-16 19:04:06 來源:億速云 閱讀:328 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關python中@contextmanager的使用示例的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在對于python中的裝飾器,我們一般會使用它輔助方法。在我們學習的上下文管理器中,有一個@contextmanager裝飾器,它能夠幫助我們在函數中定義上下文管理器方法,實現代碼方面的簡化。下面我們就python中@contextmanager的概念、使用注意、實例進行分享。

1、概念

是contextlib模塊提供的一個裝飾器,用于將一個函數聲明上下文管理,無需創建一個類或者單獨的__enter__()方法和__exit__()方法,就可以實現上下文管理。

2、注意

裝飾器@contextmanager真正的用法并不是簡化上下文管理器,而是去定義上下文管理器的方法,是對原來不是上下文管理器的類變成了一個上下文管理器。

3、實例

from contextlib import contextmanager
import time
@contextmanager
def demo(label):
  start = time.time()
  try:
    yield
  finally:
    end = time.time()
    print('{}: {}'.format(label, end - start))

with demo('counting'):
  n = 10000000
  while n > 0:
    n -= 1
# counting: 1.32399988174

看上面這個例子,函數中yield之前的所有代碼都類似于上下文管理器中__enter__方法的內容。而yield之后的所有代碼都如__exit__方法的內容。如果執行過程中發生了異常,則會在yield語句觸發。

實例擴展:

實例一:

from contextlib import contextmanager
class File():
  def query(self):
    print('查詢文件')

@contextmanager
def open():
  print('打開文件')
  yield File()
  print('關閉文件')

with open() as f:
  f.query()
  
# 結果 打開文件 查詢文件 關閉文件

實例二:

from contextlib import contextmanager
class DataBase():
  def query(self):
    print('寫入操作')
  @contextmanager
  def open(self):
    try:
      yield
      self.commit()
    except Exception as e:
      self.rollback()
      raise e

db = DataBase()
with db.open():
  db.query()

感謝各位的閱讀!關于“python中@contextmanager的使用示例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

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

AI

卢氏县| 米林县| 鸡西市| 广德县| 四川省| 若尔盖县| 亳州市| 隆德县| 桐梓县| 武乡县| 大方县| 育儿| 葫芦岛市| 渝北区| 鲜城| 克什克腾旗| 南召县| 天门市| 云浮市| 浪卡子县| 佛坪县| 旬阳县| 勐海县| 邛崃市| 乐山市| 卢氏县| 东阳市| 扎兰屯市| 城市| 隆回县| 吉林市| 同德县| 潢川县| 吉隆县| 新化县| 新营市| 商水县| 和田县| 界首市| 罗平县| 平定县|