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...