python的with关键字
生活随笔
收集整理的這篇文章主要介紹了
python的with关键字
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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)表達式open('1.txt')返回是一個_io.TextIOWrapper 類型的變量用f接受到。在with語句塊中就可以使用這個變量操作文件。執行with這個結構之后。f會自動關閉。相當于自帶了一個finally。
若1.txt不存在不存在,如下結果:報出異常后該進程被殺死,with本身并沒有異常捕獲的功能,但是如果發生了運行時異常,它照樣可以關閉文件釋放資源。
這個例子可以看出with沒有捕獲異常的功能。
。
1.txt不存在若1.txt存在,如下結果:
1.txt存在?
參考資料:
總結
以上是生活随笔為你收集整理的python的with关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab如何解不等式,如何用MATL
- 下一篇: python pygame 的下载方法