python with關鍵字學習

2022-08-20 00:09:07 字數 1767 閱讀 1601

1.with語句時用於對try except finally 的優化,讓**更加美觀,

例如常用的開發檔案的操作,用try except finally 實現:

f=open('file_name','r')

try:

r=f.read()

except:

pass

finally:

f.close()

開啟檔案的時候,為了能正常釋放檔案的控制代碼,都要加個try,然後再finally裡把f close掉,但是這樣的**不美觀,finally就像個尾巴,一直託在後面,尤其是當try裡面的語句時幾十行

用with的實現:

with open('file_name','r') as f:

r=f.read()

這條語句就好簡潔很多,當with裡面的語句產生異常的話,也會正常關閉檔案

2.除了開啟檔案,with語句還可以用於哪些地方呢?

with只適用於上下文管理器的呼叫,除了檔案外,with還支援 threading、decimal等模組,當然我們也可以自己定義可以給with呼叫的上下文管理器

2.1使用類定義上下文管理器

class a():

def __enter__(self):

self.a=1

return self

def f(self):

print 'f'

def __exit__(self,a,b,c):

print 'exit'

def func():

return a()

with a() as a:

1/0a.f()

print a.a

使用類定義上下文管理器需要在類上定義__enter__和__exit__方法,執行with a() as a: 語句時會先執行__enter__方法,這個方法的返回值會賦值給後面的a變數,當with裡面的語句產生異常或正常執行完時,都好呼叫類中的__exit__方法。

2.2使用生成器定義上下文管理器

from contextlib import contextmanager

@contextmanager

def demo():

print '這裡的**相當於__enter__裡面的**'

yield 'i ma value'

print '這裡的**相當於__exit__裡面的**'

with demo() as value:

print value

2.3 自定義支援 closing 的物件

class closing(object):

def __init__(self, thing):

self.thing = thing

def __enter__(self):

return self.thing

def __exit__(self, *exc_info):

self.thing.close()

class a():

def __init__(self):

self.thing=open('file_name','w')

def f(self):

print '執行函式'

def close(self):

self.thing.close()

with closing(a()) as a:

a.f()

python with關鍵字做了些啥?

python 上下文管理協議 我們時常會使用如下的 with open 1.txt as f print f.readlines 我們被告知這樣可以 安全 的開啟乙個檔案。因為當 執行超出 with 的作用域時檔案會自動關閉。那這是怎麼做到的呢。這就涉及到python上下文管理協議。乙個物件的實現使...

python with關鍵字 I O好伴侶

學習python的朋友都知道檔案讀寫的基本操作,通常我們讀寫文字的姿勢是這個樣子的 f open file name f.close 每次定義乙個檔案讀寫物件,在操作完成後,我們都需要進行關閉操作,如果你一不小心忘記了,恭喜你中獎了?你的程式很可能發生記憶體洩露,然後記憶體溢位,然後就掛了。這樣的事...

學習this關鍵字

在學習msdn的過程中加入一點自己的理解 先學習類例項使用this 以下是 this 的常用用途 printing method public void printemployee nalias name alias passing the object to the calctax method ...