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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow(六)with语句

發布時間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow(六)with语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

with語句

with 語句:

要使用 with 語句,首先要明白上下文管理器這一概念,有了上下文管理器,with 語句才能工作。

  • 什么是上下文管理器:

      這個管理器就是在對象內實現了兩個方法:enter() 和exit()

      enter()方法會在with的代碼塊執行之前執行,exit()會在代碼塊執行結束后執行。

      exit()方法內會自帶當前對象的清理方法。
      
    下面是一組與上下文管理器和with 語句有關的概念:

  • 上下文管理協議(Context Management Protocol):包含方法 enter() 和exit(),支持該協議的對象要實現這兩個方法。
  • 上下文管理器(Context Manager):支持上下文管理協議的對象,這種對象實現了enter() 和 exit() 方法。上下文管理器定義執行 with 語句時要建立的運行時上下文,負責執行 with 語句塊上下文中的進入與退出操作。通常使用 with語句調用上下文管理器,也可以通過直接調用其方法來使用。
  • 運行時上下文(runtimecontext):由上下文管理器創建,通過上下文管理器的 enter() 和exit() 方法實現,enter()方法在語句體執行之前進入運行時上下文,exit() 在語句體執行完后從運行時上下文退出。with 語句支持運行時上下文這一概念。
  • 上下文表達式(Context Expression):with 語句中跟在關鍵字 with之后的表達式,該表達式要返回一個上下文管理器對象。
  • 語句體(with-body):with語句包裹起來的代碼塊,在執行語句體之前會調用上下文管理器的 enter() 方法,執行完語句體之后會執行exit() 方法。
    • 作用:適用于對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,比如文件使用后自動關閉、線程中鎖的自動獲取和釋放等。
    • 工作條件:使用with語句調用上下文管理器(Context Manager)
    • 基本語法:

      • 使用with語句語法格式:
        這里 context_expression 要返回一個上下文管理器對象,該對象并不賦值給 as 子句中的 target(s) ,如果指定了 as 子句的話,會將上下文管理器的 enter() 方法的返回值賦值給 target(s)。target(s) 可以是單個變量,或者由“()”括起來的元組(不能是僅僅由“,”分隔的變量列表,必須加“()”)。
        with context_expression[as target(s)]
        with-body

      • 使用 with 語句操作文件對象
        這里使用了 with 語句,不管在處理文件過程中是否發生異常,都能保證 with 語句執行完畢后已經關閉了打開的文件句柄。

        for line in somefile:print line# ...more code

    Python的with語句是提供一個有效的機制,讓代碼更簡練,同時在異常產生時,清理工作更簡單。

    with語句執行過程

  • 執行 context_expression,生成上下文管理器 context_manager
  • 調用上下文管理器的 enter() 方法;如果使用了 as 子句,則將 enter() 方法的返回值賦值給 as 子句中的 target(s)
  • 執行語句體 with-body
  • 不管是否執行過程中是否發生了異常,執行上下文管理器的 exit() 方法,exit() 方法負責執行“清理”工作,如釋放資源等。如果執行過程中沒有出現異常,或者語句體中執行了語句 break/continue/return,則以 None 作為參數調用 exit(None, None, None) ;如果執行過程中出現異常,則使用 sys.exc_info 得到的異常信息為參數調用 exit(exc_type, exc_value, exc_traceback)
  • 出現異常時,如果 exit(type, value, traceback) 返回 False,則會重新拋出異常,讓with 之外的語句邏輯來處理異常,這也是通用做法;如果返回 True,則忽略異常,不再對異常進行處理
  • with語句如何工作

    with語句執行的解析:
    with context_expr() as var:
        doSomething()

  • 當with語句執行時,便執行上下文表達式(context_expr)(一般為某個方法)來獲得一個上下文管理器對象,上下文管理器的職責是提供一個上下文對象,用于在with語句塊中處理細節:
  • 一旦獲得了上下文對象,就會調用它的enter()方法,將完成with語句塊執行前的所有準備工作,如果with語句后面跟了as語句,則用enter()方法的返回值來賦值;
  • 當with語句塊結束時,無論是正常結束,還是由于異常,都會調用上下文對象的exit()方法,exit()方法有3個參數,如果with語句正常結束,三個參數全部都是 None;如果發生異常,三個參數的值分別等于調用sys.exc_info()函數返回的三個值:類型(異常類)、值(異常實例)和跟蹤記錄(traceback),相應的跟蹤記錄對象。
  • 因為上下文管理器主要作用于共享資源,enter()和exit()方法基本是完成的是分配和釋放資源的低層次工作,比如:數據庫連接、鎖分配、信號量加/減、狀態管理、文件打開/關閉、異常處理等。
  • class A(object):
    def enter(self):
    print(‘enter() called’)
    return self

    def print_hello(self):print("hello world!")def __exit__(self, e_t, e_v, t_b):print('__exit__() called')

    首先會執行enter方法
    with A() as a: # a為enter的返回對象
    a.print_hello()
    print(‘got instance’)
    結束會執行exit方法

    輸出結果:

    enter() called
    hello world!
    got instance
    exit() called

    總結

    以上是生活随笔為你收集整理的TensorFlow(六)with语句的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。