麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Python > 正文

Python with語句和過程抽取思想

2024-09-09 19:03:25
字體:
來源:轉載
供稿:網友

python中的with語句使用于對資源進行訪問的場合,保證不管處理過程中是否發生錯誤或者異常都會執行規定的__exit__(“清理”)操作,釋放被訪問的資源,比如有文件讀寫后自動關閉、線程中鎖的自動獲取和釋放等。

與python中with語句有關的概念有:上下文管理協議、上下文管理器、運行時上下文、上下文表達式、處理資源的代碼段。

with語句的應用場景

  編程中有很多操作都是配套使用的,這種配套的流程可以稱為計算過程,Python語言為這種計算過程專門設計了一種結構:with語句。比如文件處理就是這類計算過程的典型代表。

使用with語句前后對比

沒有使用with語句之前,我們是這樣打開一個文件的:

try: # 1. [進入] f = open('a.txt', 'r', encoding="utf-8") # 2. [執行] print(f.read())finally: if f:  # 3. [退出]  f.close()

python操作文件的流程一般就是這三步:

1.[進入]用只讀方式打開文件

如果文件不存在,open()函數就會拋出一個IOError的錯誤,并且給出錯誤碼和詳細的信息告訴你文件不存在

2.[執行]讀取文件內容

如果文件打開成功,接下來,調用read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示

3.[退出]關閉打開的文件

文件使用完畢后必須關閉,因為文件對象會占用操作系統的資源,并且操作系統同一時間能打開的文件數量也是有限的

思考為什么關閉文件操作一定要放在finallly語句里?

  由于文件讀寫時都有可能產生IOError,一旦出錯,后面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try ... finally來實現。

發現共性:

我們發現其實這種過程化的語句有共性,比如說在進去一個片段必須做某種超贊,處理工作又需要執行一個結束操作。比如上面的這段代碼:

finally: if f:  f.close()

就可以做一個封裝。

使用with語句后,我們是這樣打開一個文件的:

with open("a.txt", "r", encoding="utf-8") as f: print(f.read())

這個with語句和前面的try ... finally結構是一樣的,但是代碼更佳簡潔,并且不必調用f.close()方法。

with語句的執行原理

從解釋器的角度去理解with語句執行流程。

with語句的基本形式是:

with 表達式 as 變量: 語句塊

  這樣的一段代碼可以稱為一個上下文(context),在執行with語句時,解釋器會先求出表達式的值,這個值(對象)是一個上下文管理器,并且假設這個對象擁有如下類的構造方法:

def __enter__():  # 描述進入上下文的動作  pass def __exit__():  # 描述退出上下文的動作  pass

with語句在求出這個上下文管理器對象之后,自動執行進入方法,并將這個對象的返回值賦值于 as 之后的變量,然后執行語句塊。然后在退出上下文前,自動執行對象的退出方法

python系統和標準庫的一些類型定義了這對操作,可以直接用于with語句。比如文件對象就直接支持這一對操作,因此可以用在with語句的頭部。

如果你也有類似的計算過程需要抽取出來,那么可以自定義一個類,并且包含進入、退出方法。

自定義open函數

自己實現才發現,使用裝飾器和生成器就能很好的解決這個問題,不需要用到類構造方法來實現;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩大片在线永久观看视频网站免费 | 久久综合狠狠综合久久 | 久久久无码精品亚洲日韩按摩 | 污视频在线免费播放 | 久久亚洲精品久久国产一区二区 | 美女黄色毛片免费看 | 欧美另类69xxxxx 视频 | 国产亚洲精品成人a | 性欧美极品xxxx欧美一区二区 | 第四色成人网 | 欧美日韩高清一区二区三区 | 91精品国产九九九久久久亚洲 | av播放在线 | 久久免费视频3 | 日韩精品99久久久久久 | 99视频在线观看视频 | 久久新地址 | 久久精品视频网站 | 成人免费观看49www在线观看 | 亚洲成人午夜精品 | www69xxxxx| 日本黄色不卡视频 | 亚洲成人免费影视 | 中文字幕一区二区三区四区 | 国产精品久久久久久久久久久久久久久 | 久久2019中文字幕 | 欧美自拍 | 国产精品性夜天天视频 | 国产免费让你躁在线视频 | 欧美一区二区黄 | 日本中文高清 | 国产成年人视频 | 日本a在线观看 | 深夜福利视频免费观看 | www.91成人 | 亚洲啪| 欧美成年人视频在线观看 | 色欧美视频 | 91av资源在线| 成人免费网站在线观看视频 | 久久国产精品久久久久久久久久 |