欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python with as 的實現原理

系統 1607 0

有一些任務,可能事先需要設置,事后做清理工作。對于這種場景,Python的with語句提供了一種非常方便的處理方式。一個很好的例子是文件處理,你需要獲取一個文件句柄,從文件中讀取數據,然后關閉文件句柄。
如果不用with語句,代碼如下:

            
              file = open("/tmp/foo.txt")
data = file.read()
file.close()

            
          

這里有兩個問題。一是可能忘記關閉文件句柄;二是文件讀取數據發生異常,沒有進行任何處理。下面是處理異常的加強版本:

            
              file = open("/tmp/foo.txt")
try:
    data = file.read()
finally:
    file.close()

            
          

雖然這段代碼運行良好,但是太冗長了。這時候就是with一展身手的時候了。除了有更優雅的語法,with還可以很好的處理上下文環境產生的異常。下面是with版本的代碼:

            
              with open("/tmp/foo.txt") as file:
    data = file.read()

            
          

with如何工作?

這看起來充滿魔法,但不僅僅是魔法,Python對with的處理還很聰明。基本思想是with所求值的對象必須有一個 enter ()方法,一個 exit ()方法。

緊跟with后面的語句被求值后,返回對象的 enter ()方法被調用,這個方法的返回值將被賦值給as后面的變量。當with后面的代碼塊全部被執行完之后,將調用前面返回對象的 exit ()方法。

下面例子可以具體說明with如何工作:

            
              #!/usr/bin/env python
# with_example01.py
 
class Sample:
    def __enter__(self):
        print "In __enter__()"
        return "Foo"
 
    def __exit__(self, type, value, trace):
        print "In __exit__()"
 
def get_sample():
    return Sample()
 
with get_sample() as sample:
    print "sample:", sample

            
          

運行代碼,輸出如下

            
              In __enter__()
sample: Foo
In __exit__()

            
          

正如你看到的,
1. enter ()方法被執行
2. enter ()方法返回的值 - 這個例子中是"Foo",賦值給變量'sample'
3. 執行代碼塊,打印變量"sample"的值為 "Foo"
4. exit ()方法被調用
with真正強大之處是它可以處理異常。可能你已經注意到Sample類的 exit 方法有三個參數- val, type 和 trace。 這些參數在異常處理中相當有用。我們來改一下代碼,看看具體如何工作的。


作者:龍皓晨
鏈接:https://www.jianshu.com/p/1a02a5b63c88
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 毛片在线免费 | 久久精品视频99 | 欧美交 | 日韩成人在线观看 | 欧美精品第二页 | 日韩一二三 | 国产精品久久久久久久网站 | 99re视频 | 九色视频自拍 | 99热在线免费观看 | 国产亚洲精品久久久久久国模美 | 日本高清色惰www在线视频 | 狠狠伊人 | 亚洲精品黄 | 成年人网站在线免费观看 | 国产99久久精品一区二区永久免费 | 超碰一区二区三区 | 日韩欧美一二三区 | 国产男女交性视频播放 | 日本久久视频 | 人人搞人人干 | 日韩欧美在线免费观看 | 波多野一区二区三区在线 | 亚洲午夜在线视频 | 男女视频在线 | 一区二区国产精品 | 极品逼| 精品成人免费一区二区在线播放 | 欧美日韩中文 | 免费在线一级毛片 | 91日本在线观看亚洲精品 | 日韩精品一区二区三区中文字幕 | 国产精品久久久久影视青草 | 好吊色欧美一区二区三区四区 | 国产香蕉免费精品视频 | 视频一区二区三区四区五区 | 午夜精品久久久久久91 | 国产一级高清 | 波多野结衣办公室33分jian情 | 色拍拍在精品视频69影院在线 | 日本欧美黄色 |