Python 的 with 語法使用

2021-10-03 20:43:46 字數 1740 閱讀 5766

傳統上若要開啟乙個檔案,我們會這樣寫

#開啟檔案

f = open(filename)

#...

#關閉檔案

f.close(

)

這種寫法會有乙個問題,如果在使用檔案的過程中發生了一些例外狀況,造成程式提早跳開時,這個開啟的檔案就會沒有被關閉,所以比較好的程式是使用try與finally

#開啟檔案

f = open(filename)

try:

# ...

finally:

#關閉檔案

f.close(

)

這種寫法雖然不會有問題,但是缺點就是必須手動加入開關指令碼的程式,不很方便,也很容易忘記。

這種狀況我們可以改用with的寫法:

#以with開啟檔案

with open(filename) as f:

# ...

這裡再使用with開啟指令碼時,會將開啟的指令碼一樣放在f變數中,但是這個f只有在這個with的範圍內可以使用,而離開這個範圍時f就會被自動關閉,**相關的資源。

示例:

#以with寫入

with open(

'file.txt', 'w'

) as f:

f.write(

'hello, world!'

)

使用with的話,指令碼使用完之後就會自動關閉,方便很多。

若要自行建立context manager,只要定義好類別的_enter_與_exit_兩個方法函式即可,with再剛開始執行時,會執行_enter_這個函式,傳回配給的資源(例如開啟的資料自動存入快取),而再with範圍結束時,會自動呼叫_exit_釋放資(清楚快取)

示例:

#/usr/bin/python

# -*- coding: utf-8 -*-

# 自行定義 context manager

class file(object):

def __init__(self, filename, mode):

# 設定檔名與開檔模式

self.filename = filename

self.mode = mode

# 配給資源(開啟檔案)

def __enter__(self):

print(

"開啟檔案:" + self.filename)

self.open_file = open(self.filename, self.mode)

return self.open_file

# **資源(關閉檔案)

def __exit__(self, type, value, traceback):

print(

"關閉檔案:" + self.filename)

self.open_file.close(

)

使用方式如下:

with file(

"file.txt", "w"

) as f:

print(

"寫入檔案..."

) f.write(

"hello, world."

)

Python語法筆記 if的使用

indentationerror expected an indented block 縮排錯誤 期望乙個縮排塊 a 2 if a 2 print 棒棒噠 冒號用於區分 層次,理解條件執行的邏輯及先後順序 縮排是4個空格或1個tab。被縮排的內容 print 函式 和if條件語句組成了乙個 塊 乙個...

python的語法元素 Python的語法元素

在python中 表示注釋的作用 是單行注釋 是多行注釋。以 開頭和結尾 python的變數名命名規則 大小寫字母 數字 下劃線和漢字等字元及組合 注意事項 大小寫敏感 首字元不能是數字 不與保留字相同 保留字 被程式語言內部定義並保留使用的識別符號,也叫關鍵字 對於字串序號,python提出了兩種...

Python的基礎語法及使用(二)

本文是對我的另外一篇文章python的基礎語法及使用的完善 方法一 name xzw sayhello hello,name print sayhello 方法二 字元的格式化功能 s代表字串,d代表整數 都代表在字元中的佔位符 變數的位置與字串中的佔位是一一對應關係 name xzw age 22...