日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python with关键字学习

發(fā)布時(shí)間:2025/3/21 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python with关键字学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。