python的with關鍵字

2021-10-04 18:04:42 字數 1570 閱讀 5258

with語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的「清理」操作,釋放資源,比如檔案使用後自動關閉、執行緒中鎖的自動獲取和釋放等。with表示式其實是try-finally的簡寫形式。但是又不是全相同。

"""

with 語句實質是上下文管理。

1、上下文管理協議。包含方法__enter__() 和 __exit__(),支援該協議物件要實現這兩個方法。

2、上下文管理器,定義執行with語句時要建立的執行時上下文,負責執行with語句塊上下文中的進入與退出操作。

3、進入上下文的時候執行__enter__方法,如果設定as var語句,var變數接受__enter__()方法返回值。

4、如果執行時發生了異常,或者with結構的程式結束,就退出上下文管理器。呼叫管理器__exit__方法。

"""

class benchmark():

def __init__(self, prefix=none):

self.prefix = prefix + ' ' if prefix else ''

def __enter__(self):

self.start = time.time()

def __exit__(self, *args):

print('%stime: %.4f sec' % (self.prefix, time.time() - self.start))

with benchmark('workloads are quared.'):

for _ in range(100000):

x = nd.random.uniform(shape=(2000, 2000))

y = nd.dot(x, x).sum()

# 相當於

__init__(self, prefix=none)

__enter__(self)

for _ in range(100000):

x = nd.random.uniform(shape=(2000, 2000))

y = nd.dot(x, x).sum()

__exit__(self, *args)

其中的context是乙個表示式,返回的是乙個物件,var用來儲存context表示式返回的物件,可以有單個或者多個返回值。

with open('1.txt') as f:

print(f.read())

print(f.closed)

若1.txt不存在不存在,如下結果:報出異常後該程序被殺死,with本身並沒有異常捕獲的功能,但是如果發生了執行時異常,它照樣可以關閉檔案釋放資源。

這個例子可以看出with沒有捕獲異常的功能。

若1.txt存在,如下結果:

python的with關鍵字

with表示式其實是try finally的簡寫形式。但是又不是全相同。格式with context as var pass 其中的context是乙個表示式,返回的是乙個物件,var用來儲存context表示式返回的物件,可以有單個或者多個返回值。with open 1.txt as f prin...

python的關鍵字

1.什麼是關鍵字 python一些具有特殊功能的識別符號,這就是所謂的關鍵字 關鍵字,是python已經使用的了,所以不允許開發者自己定義和關鍵字相同的名字的識別符號 檢視關鍵字 and as assert break class continue def del elif else except ...

python的系統關鍵字 開發系統關鍵字

1 舉個例子,想要開發乙個加減乘除的系統關鍵字,我們首先寫乙個calc.py檔案 1 coding utf 8 3 classcalc object 4 defadd self,a,b 5 c int a int b 6 returnc7 8 defsub self,a,b 9 c int a in...