在平時工做中總會有這樣的任務,它們須要開始前作準備,而後作任務,而後收尾清理....好比讀取文件,須要先打開,讀取,關閉python
這個時候就可使用with簡化代碼,很方便post
1.沒有用with語句spa
1
2
3
|
f
=
open
(
'./test.txt'
)
f.read()
f.close()
|
2.使用with語句code
1
2
|
with
open
(
'./test.txt'
) as f:
f.read()
|
with的工做原理是?blog
with 中包含 __enter__ 與 __exit__ 方法, 執行順序是,在with下面語句未執行前,先執行__enter__方法,with下語句執行結束後,最後執行__exit__.ci
自定義一個上下文管理協議,看一下它的原理博客
1
2
3
4
5
6
7
8
9
10
11
12
|
class
Context():
def
__enter__(
self
):
print
(
'start'
)
return
self
def
__exit__(
self
,
*
unused):
print
(
'over'
)
def
dosomething(
self
):
print
(
'dosomething'
)
with Context() as ctx:
ctx.dosomething()
|
打印結果string
startit
dosomethingio
over
1
|
<em
id
=
"__mceDel"
><em
id
=
"__mceDel"
><br><br><
/
em><
/
em>
|