亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python with as 的實現原理

系統 1769 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的處理還很聰明?;舅枷胧莣ith所求值的對象必須有一個 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真正強大之處是它可以處理異常??赡苣阋呀涀⒁獾絊ample類的 exit 方法有三個參數- val, type 和 trace。 這些參數在異常處理中相當有用。我們來改一下代碼,看看具體如何工作的。


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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本一区二区三区高清福利视频 | 女人的毛片 | 一级毛片片| 久久亚洲精品一区二区三区浴池 | 欧美激情一区二区三区中文字幕 | 麻豆国产在线观看一区二区 | 动漫精品欧美一区二区三区 | 特级毛片免费播放 | 亚洲日本在线观看 | 久久高清免费 | a免费国产一级特黄aa大 | 91在线网址 | 久久婷婷五月综合色丁香 | 久久这里只有精品66re99 | 国产一区二区三区精品久久呦 | 欧美精品 在线播放 | 国产精品视频偷伦精品视频 | 狠狠鲁狠狠操 | 欧美国产激情二区三区 | 亚洲色四在线视频观看 | 在线91精品亚洲网站精品成人 | 人人天天夜夜 | 亚洲欧美另类专区 | 996re免费热在线视频手机 | 91成人精品| 一级毛片高清 | 国产精品久久久久久久久久影院 | 欧美一级毛片欧美毛片视频 | 国内精品免费一区二区观看 | 91国内视频| 毛片特级| 一级影院| 九九热国产精品视频 | 青青青青爽视频在线播放 | 国产乱子伦视频大全 | 国产理论视频在线观看 | 亚洲一区综合 | 日韩中文字幕在线免费观看 | 性欧美xo视频在线观看 | 天天成人| 国产午夜亚洲精品第一区 |