Python 上下文管理器和with塊 二

2021-10-13 17:34:16 字數 1072 閱讀 8731

標準庫中還有個contextlib 模組,提供一些實用工具,

下面展開介紹下@contextmanager

@contextmanager 裝飾器能減少建立上下文管理器的樣板**量,因為不用編寫乙個完整的類,定義 __enter__ 和 __exit__ 方法,而只 需實現有乙個 yield 語句的生成器,生成想讓__enter__ 方法返回的值。yield 語句的作用是把函式的定義體分成兩部分:yield語句前面的所有**在 with塊開始時(即直譯器呼叫 __enter__ 方法時)執行,yield語句後面的**在with塊結束時(即呼叫__exit__方法時)執行。

>>> @contextmanager

... def lookingglass():

... import sys

... origin_writer=sys.stdout.write

... def reverse_writer(text):

... origin_writer(text[::-1])

... sys.stdout.write=reverse_writer

... try:

... yield 'yield return'

... except:

... print('enter exception')

... finally:

... sys.stdout.write=origin_writer

...

>>> with lookingglass() as what:

... print('test code')

... print(what)

...

edoc tset

nruter dleiy

>>> print('test')

test

生成器函式的作用更像是協程:執行到某一點時暫停,讓客戶**執行,直到客戶讓協程繼續做事

python 上下文管理器和with塊一 

with和python上下文管理器

下面是3種開啟資源的方式,一種直接開啟,一種try方式,一種with方式,每個的方式的優缺點就不說了,這裡記錄下with先骨幹的內容。f open a.txt r do thing f.close try f open a.txt r do thing except ioerror as e pri...

python 上下文管理器

上下文管理器允許你在有需要的時候,精確地分配和釋放資源。使用上下文管理器最廣泛的案例就是with語句了。想象下你有兩個需要結對執行的相關操作,然後還要在它們中間放置一段 上下文管理器就是專門讓你做這種事情的。舉個例子 with open some file w as opened file open...

python上下文管理器

上下文管理器是乙個包裝任意 塊的物件。上下文管理器保證進入上下文管理器時,每次 執行的一致性 當退出上下文管理器時,相關資源會被正確 這裡被正確 指的是在 exit 方法自定義 比如關閉資料庫游標 值得注意的是,上下文管理器一定能夠保證退出步驟的執行。如果進入上下文管理器,根據定義,一定會有退出步驟...