python中with的用法

2021-08-11 04:59:58 字數 2525 閱讀 3616

剛剛開始學python,今天在乙個基礎例子中看到了一行**,覺得很有意思,就去研究了一下

with

open("../config/name_login.txt",'r') as f:

其實這是python中的with語句,類似於php中的try()……catch(),主要是用來檔案處理,你需要的是獲取乙個檔案控制代碼,然後從檔案讀取資料,然後處理資料,最後關閉檔案

在php中你可以這樣寫

<?php

$filename = "/usr/local/something.txt";

$handle = fopen($filename, "r");

$contents = fread($handle, filesize ($filename));

fclose($handle);

?>

這個是比較簡單的例子,通常我們會假如try(),catch()來處理異常

<?php

try catch (exception

$e)

?>

在學習完python的with語句之後你就會發現,這段**實在是太冗長了…………..

那麼,with語句是怎樣工作的呢?

借用其他人的說法:

緊跟with後面的語句被求值後,返回物件的enter() 方法被呼叫,這個方法的返回值將被賦值給as後面的變數。

當with後面的**塊全部被執行完之後,將呼叫前面返回物件的exit()方法。

下面例子可以具體說明with如何工作:

#!/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__()"

defget_sample

():return sample()

with get_sample() as sample:

print

"sample:", sample

執行**,輸出如下

bash-3.2$ ./with_example01.py

in __enter__()

sample: foo

in __exit__()

正如你看到的: 1.enter()方法被執行 2.enter()方法返回的值 - 這個例子中是」foo」,賦值給變數』sample』 3. 執行**塊,列印變數」sample」的值為 「foo」 4.exit()方法被呼叫

看到這裡我是覺得有點像php中的構造方法與析構方法,你有感覺嘛???

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

下面是一組與上下文管理器和with 語句有關的概念。

上下文管理協議(context management protocol):包含方法enter() 和exit(),支援該協議的物件要實現這兩個方法。

上下文管理器(context manager):支援上下文管理協議的物件,這種物件實現了enter() 和exit() 方法。上下文管理器定義執行 with 語句時要建立的執行時上下文,負責執行 with 語句塊上下文中的進入與退出操作。通常使用 with 語句呼叫上下文管理器,也可以通過直接呼叫其方法來使用。

執行時上下文(runtime context):由上下文管理器建立,通過上下文管理器的enter() 和exit() 方法實現,enter() 方法在語句體執行之前進入執行時上下文,exit() 在語句體執行完後從執行時上下文退出。with 語句支援執行時上下文這一概念。

上下文表示式(context expression):with 語句中跟在關鍵字 with 之後的表示式,該表示式要返回乙個上下文管理器物件。

語句體(with-body):with 語句包裹起來的**塊,在執行語句體之前會呼叫上下文管理器的enter() 方法,執行完語句體之後會執行exit() 方法。

2.3.

python中with的用法

python中with的用法 清單 1.with 語句的語法格式 1 2 with context expression as target s with body 無論context expression是否發生異常,都能保證不報錯,類似於try finally正規化。enter 語句返回值賦給t...

Python中with的用法

之前再遇到with語句在檔案操作上的用法非常巧妙,以前不太熟悉,看的時候也產生一些困惑 有一些任務,可能事先需要設定,事後做清理工作。對於這種場景,python的with語句提供了一種非常方便的處理方式。其中乙個很好的例子是檔案處理,你需要獲取乙個檔案控制代碼,從檔案中讀取資料,然後關閉檔案控制代碼...

python中 的用法

在python的函式中偶爾會看到函式定義的上一行有 functionname的修飾,當直譯器讀到 這樣的修飾符的時候會優先解除 後的內容,直接就把 的下一行的函式或者類作為 後邊函式的引數,然後將返回值賦給下乙個修飾的函式物件。示例 def function 1 a print function 1...