我之前在這篇部落格裡說到了如何定義乙個上下文管理器協議(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...