python with关键字学习
1.with語(yǔ)句時(shí)用于對(duì)try except finally 的優(yōu)化,讓代碼更加美觀(guān),
例如常用的開(kāi)發(fā)文件的操作,用try except finally 實(shí)現(xiàn):
f=open('file_name','r') try:r=f.read() except:pass finally:f.close()打開(kāi)文件的時(shí)候,為了能正常釋放文件的句柄,都要加個(gè)try,然后再finally里把f close掉,但是這樣的代碼不美觀(guān),finally就像個(gè)尾巴,一直托在后面,尤其是當(dāng)try里面的語(yǔ)句時(shí)幾十行
用with的實(shí)現(xiàn):
with open('file_name','r') as f:r=f.read()這條語(yǔ)句就好簡(jiǎn)潔很多,當(dāng)with里面的語(yǔ)句產(chǎn)生異常的話(huà),也會(huì)正常關(guān)閉文件
?
2.除了打開(kāi)文件,with語(yǔ)句還可以用于哪些地方呢?
with只適用于上下文管理器的調(diào)用,除了文件外,with還支持?threading、decimal等模塊,當(dāng)然我們也可以自己定義可以給with調(diào)用的上下文管理器
?
2.1使用類(lèi)定義上下文管理器
class A():def __enter__(self):self.a=1return selfdef 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使用類(lèi)定義上下文管理器需要在類(lèi)上定義__enter__和__exit__方法,執(zhí)行with A() as a: 語(yǔ)句時(shí)會(huì)先執(zhí)行__enter__方法,這個(gè)方法的返回值會(huì)賦值給后面的a變量,當(dāng)with里面的語(yǔ)句產(chǎn)生異常或正常執(zhí)行完時(shí),都好調(diào)用類(lèi)中的__exit__方法。
?
2.2使用生成器定義上下文管理器
from contextlib import contextmanager@contextmanager def demo():print '這里的代碼相當(dāng)于__enter__里面的代碼'yield 'i ma value'print '這里的代碼相當(dāng)于__exit__里面的代碼'with demo() as value:print value?
2.3?自定義支持 closing 的對(duì)象
class closing(object):def __init__(self, thing):self.thing = thingdef __enter__(self):return self.thingdef __exit__(self, *exc_info):self.thing.close()class A():def __init__(self):self.thing=open('file_name','w')def f(self):print '運(yùn)行函數(shù)'def close(self):self.thing.close()with closing(A()) as a:a.f()轉(zhuǎn)載于:https://www.cnblogs.com/lnn123/p/10481297.html
總結(jié)
以上是生活随笔為你收集整理的python with关键字学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微信小程序中的渐变色
- 下一篇: websocket python爬虫_p