溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中with...as... 語法示例

發布時間:2020-11-25 11:29:27 來源:億速云 閱讀:142 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Python中with...as... 語法示例的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

with從Python 2.5就有,需要from __future__ import with_statement。自python 2.6開始,成為默認關鍵字。

也就是說with是一個控制流語句,跟if/for/while/try之類的是一類的,with可以用來簡化try finally代碼,看起來可以比try finally更清晰。

with EXPRESSION [ as VARIABLE] WITH-BLOCK

基本思想是with所求值的對象必須有一個__enter__()方法,一個__exit__()方法。

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

with expresion as variable的執行過程是,首先執行__enter__函數,它的返回值會賦給as后面的variable,想讓它返回什么就返回什么,只要你知道怎么處理就可以了,如果不寫as variable,返回值會被忽略。

然后,開始執行with-block中的語句,不論成功失敗(比如發生異常、錯誤,設置sys.exit()),在with-block執行完成后,會執行__exit__函數。

這樣的過程其實等價于:

try:
    執行 __enter__的內容
    執行 with_block.
finally:
    執行 __exit__內容

再看個例子

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

使用with...as...的方式替換,修改后的代碼是:

with open("/tmp/foo.txt") as file:
    data = file.read()
#!/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。這些參數在異常處理中相當有用。

感謝各位的閱讀!關于Python中with...as... 語法示例就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女