python裡面有個特殊的模組叫做上下文模組,可以和with搭配來實現一些功能。
他的執行方式是使用者需要乙個定義乙個生成器的函式;with後面跟這個函式,他會執行yield之前的**;然後跳出來,執行with語句下面的**,然後再切換回函式,執行finally後面的**。
比如
import contextlib
@contextlib.contextmanager
def worker_state(state_list, worker_thread):
try:
yield
finally:
state_list.remove(worker_thread)
print(state_list)
free_list =
current_thread = "alex"
with worker_state(free_list, current_thread):
print(123)
print(456)
print(free_list)
----------
123456
['alex']
例2 如果with後面跟個as,我們可以通過yield傳遞乙個物件到as上面,比如下面我就把乙個列表物件傳給了tt
import contextlib
import socket
@contextlib.contextmanager
def test(num):
a=try:
yield a
finally:
num+=100
print(num)
with test(20) as tt:
print(tt)
------------
[20]
120
python學習筆記 上下文管理器
上下文管理器可以在不需要檔案的時候,自動關閉檔案。下面我們看一下兩段程式 如下 without context manager f open new.txt w print f.closed whether the file is open f.write hello world f.close p...
Python筆記 上下文管理器
with 語句後面的結果物件,需要重寫 enter 和 exit 方法 當進入到 with 塊時,會自動呼叫 enter 方法裡的 當 with 塊執行完成以後,會自動呼叫 exit 方法 class demo object def enter self print enter 方法被執行了 ret...
26 python筆記 上下文管理器
個人部落格 注 enter方法可以寫連線資料庫的操作,exit方法寫斷開連線的操作,用with去管理 注 with開啟的檔案物件,就是1個上下文管理器 注 with語句可以去管理 上下文管理器物件 注 使用with管理,上下文管理器 不需要自己呼叫 enter exit 方法 示例 上下文管理器 上...