Python高階 with上下文管理器

2021-08-28 02:16:26 字數 1362 閱讀 2699

任何實現了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 語...