任何實現了enter() 和exit() 方法的物件都可稱之為上下文管理器,上下文管理器物件可以使用 with 關鍵字。
如果乙個乙個檔案使用普通方式開啟:
def
m1():
f = open("output.txt", "w")
f.write("python之禪")
f.close()
如果程式執行中碰到錯誤,會退出程式,可能沒有執行f.close(),會造成系統資源的浪費。
如果使用with方式:
with file('out.txt', 'w') as f:
print("writing")
f.write('hello, python')
如果程式執行中碰到錯誤,會自動關閉檔案。
自定義上下文管理器:
class
file
():def
__init__
(self, filename, mode):
self.filename = filename
self.mode = mode
def__enter__
(self):
print("entering")
self.f = open(self.filename, self.mode)
return self.f
def__exit__
(self, *args):
print("will exit")
self.f.close()
實現上下文管理器的另一種方式:
from contextlib import contextmanager
@contextmanager
defmy_open
(path, mode):
f = open(path, mode)
yield f
f.close()
python 還提供了乙個 contextmanager 的裝飾器,更進一步簡化了上下文管理器的實現方式。通過 yield 將函式分割成兩部分,yield 之前的語句在enter方法中執行,yield 之後的語句在exit方法中執行。緊跟在 yield 後面的值是函式的返回值。
呼叫:
with my_open('out.txt', 'w') as f:
f.write("hello , the ******st context manager")
python 高階 with 上下文管理
with 上下文管理器 語法糖 python 提供的一種簡化語法,在編寫 時更加簡潔 with 就是眾多語法糖中的一種 with 執行原理 能通過with進行執行的語句,都是實現了上下文管理器 上下文管理器中包含兩個魔法方法 enter 和 exit enter 方法提供環境的初始化操作 exit ...
上下文 上下文棧
全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...
中斷上下文 程序上下文
在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...