Python中的contextlib模組

2021-10-07 12:00:53 字數 1075 閱讀 2704

我之前在這篇部落格裡說到了如何定義乙個上下文管理器協議(with語句),今天要說乙個更簡單的定義方式。

python提供了乙個內建的模組contextlib,該模組有乙個裝飾器@contextlib.contextmanager,可以將函式變為上下文管理器。

import contextlib

@contextlib.contextmanager

deffile_open

(file_name)

:#此處只是模擬並沒有真的開啟乙個檔案

print

("file open"

)yield

# 把函式變為生成器

print

("file end"

)

其實yield上面的邏輯就相當於之前那篇部落格裡的__enter__函式中的邏輯(獲取資源),而yield下面的邏輯就相當於那篇部落格中的__exit__函式(釋放資源)。

yield中邏輯可以任意。這樣函式就變成了乙個上下文管理器。

然後使用with語句。

with file_open(

"bobby.txt"

)as f_open:

#只是模擬,說明邏輯,沒有真的檔案

print

("file processing"

)#輸出為

# file open

# file processing

# file end

執行時先進入__enter__函式,即yield上面的**,列印file open,然後執行列印file processing,最後進入__exit__函式,即執行yield下面的**,列印file end

關於android中的Context

提到android,我們首先想到的是activity,service,broadcastreceiver,contentprovider,然而在使用這些元件的時候,卻離不開context今天就來研究一下context。1.context是什麼 2.context裡面有哪些資料 3.context能提...

react中Context的使用

context 提供了乙個無需為每層元件手動新增 props,就能在元件樹間進行資料傳遞的方法。props單向資料流動 如果覺得props傳遞資料很繁瑣,可以採用context,進行跨元件傳遞資料 例如給子代元素傳遞一筆錢 手動新增狗頭 為了後續使用方便,封裝乙個元件 import from rea...

react中Context的使用

context 提供了乙個無需為每層元件手動新增 props,就能在元件樹間進行資料傳遞的方法。props單向資料流動 如果覺得props傳遞資料很繁瑣,可以採用context,進行跨元件傳遞資料 例如給子代元素傳遞一筆錢 手動新增狗頭 為了後續使用方便,封裝乙個元件 import from rea...