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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql with as 用法_Python之图解with语句

發布時間:2025/3/12 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql with as 用法_Python之图解with语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們使用Python的時候,常使用到如下的代碼塊:

# 文件讀取 with open(file, 'r') as f:# CODE BLOCK ## 梯度計算 with tf.GradientTape() as g:# CODE BLOCK #

在很多場景中,使用with語句來可以讓我們可以更好地來管理資源和簡化代碼,它可以看做是對try/finally模式的簡化。它原理上是利用了上下文管理器,下文簡要介紹將對其執行原理和自定義的方法。

概念

上下文管理協議(Context Management Protocol)

包含方法 __enter__() 和 __exit__() ,支持該協議的對象要實現這兩個方法。

上下文管理器(Context Manager)

支持上下文管理協議的對象,這種對象必須實現 __enter__() 和 __exit__() 方法。
上下文管理器定義執行with語句時要建立的運行時上下文,負責執行with語句塊上下文中的進入與退出操作。
通常使用with語句調用上下文管理器,也可以通過直接調用其方法來使用。

  • __enter__()
    • with語句執行時,先獲取上下文管理器對象,隨后調用其 __enter__()
    • 若有 as var 語句,則將返回值賦給變量var
    • 可以返回上下文管理器對象本身,也可以是其他相關對象
  • __exit__()
    • 帶有三個參數 exc_type, exc_val, exc_tb
    • 若上下文管理器對象執行無異常,則三個參數均為 None
    • 若發生異常,則三個參數分別為 異常類型,異常值和tracback信息

原理

# EXP: 表達式 # VAR: 變量名,[as VAR][可選] # BlOCK: 代碼塊with EXP as VAR:BLOCK

with語句原理
  • 執行代碼時,先執行 EXPR 語句,生成上下文管理器對象 context_manager;
  • 獲取上下文管理器的 __exit()__ 方法,并保存起來用于之后的調用;
  • 調用上下文管理器的 __enter__() 方法,且可將返回值賦給as語句變量;
  • 執行BLOCK中的表達式;
  • 不管是否執行過程中是否發生了異常,執行上下文管理器的 __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,則忽略異常,不再對異常進行處理。
  • 自定義上下文管理器

    • 它使代碼更簡練,可以簡化try/finally模式
    • 當代碼異常產生時,__exit__() 會執行清理工作
    • 可以對軟件系統中的資源進行管理,比如數據庫連接、共享資源的訪問控制等
    # coding = utf-8# 上下文管理器類 class TestWith(object):def __init__(self):passdef __enter__(self):"""進入with語句的時候被調用并將返回值賦給as語句的變量名"""print('__enter__')return "var"def __exit__(self, exc_type, exc_val, exc_tb):"""離開with的時候被with調用"""print('__exit__')return True# with后面必須跟一個上下文管理器 # 如果使用了as,則是把上下文管理器的 __enter__() 方法的返回值賦值給 target # target 可以是單個變量,或者由“()”括起來的元組(不能是僅僅由“,”分隔的變量列表,必須加“()”) if __name__ = 'main':with TestWith() as var:print(var)# 運行結果 ''' __enter__ var __exit__ '''

    本例僅對應代碼正常執行的流程,其他特殊情況不再一一列舉,有興趣可單獨實驗。

    參考

    淺談 Python 的 with 語句
    Python中with用法詳解
    Python中with使用

    總結

    以上是生活随笔為你收集整理的mysql with as 用法_Python之图解with语句的全部內容,希望文章能夠幫你解決所遇到的問題。

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