欧美三区_成人在线免费观看视频_欧美极品少妇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久久国产综合精品女小说 | 欧美一区欧美二区 | 丝袜捆绑调教视频免费区 | 一级特黄女人生活片 | 午夜影院18 | 成人在线免费视频观看 | 国产日韩欧美在线观看不卡 | 日韩精品中文字幕视频一区 | 国产午夜精品一区二区三区嫩草 | 日日夜夜拍拍 | 无码色情影片视频在线看免费 | 黄色av网站在线免费观看 | 精品在线一区二区 | 久久精品国产免费观看99 | 麻豆传媒地址 | 91免费官网| 精品国产一区二区国模嫣然 | 美女视频黄色片 | 亚洲一区无码中文字幕 | www.国产视频 | 9久久99久久久精品齐齐综合色圆 | 一本色道久久88加勒比—综合 | 国产免费久久精品44 | 奇米激情| 成人偷拍片视频在线观看 | 国产精品视屏 | 精品国产一区二区三区久久久蜜臀 | 加勒比久草 | 激情小说色 | 久久国产这里只精品免费 | 亚洲美女毛片 | 欧美亚洲精品在线 | 今井夏帆av一区二区 | 正在播放国产精品 | 久久综合网址 | 女女女女bbbbbb毛片在线 | 精品国产理论在线观看不卡 | xxx 日本韩国 | 性视频一区二区 | 欧美日韩在线免费观看 |