2011-05-05 48 views
9

什麼是使用用於在Python 3上打開文件的優點是什麼?

with open(__file__, 'r') as f: 

,而不是使用真正的性能優勢:

open(__file__,'r') 
在Python 3

兩個寫入和讀取文件?

+3

您不應該對公共變量使用'__name__'樣式標識符。這些名字意在具有特殊的「魔術」含義。 – ulidtko 2011-05-05 18:28:42

+1

@ulidtko這就是它在這裏使用的模塊正在打開。 – 2011-05-05 18:30:12

+0

閱讀此:http://effbot.org/zone/python-with-statement.htm – fardjad 2011-05-05 18:31:49

回答

8

with語句的基本功能是利用對象上的兩個新魔術關鍵字:__enter____exit__來實現自動清理(C++析構函數,.net IDisposable等)。所以真正發生的事如下:

file = open(__file__, 'r') 
try: 
    # your code here 
finally: file.close() 

隨時閱讀多一點實際執行中pep-0343

11

使用with表示該文件將在您離開該塊後立即關閉。這是有益的,因爲關閉文件是一件容易被人遺忘的事情,並且不再需要資源。

+3

請注意,這不是特定於Python 3的。 – 2011-05-05 18:30:43

+0

@jleedev:正確,在Python3之前存在'with'。 – unholysampler 2011-05-05 18:40:55

+0

'with'是在Python 2.6中引入的,但早在Python 2.5中就可以作爲'__future__'特性(例如'from __future__ import with_statement')提供。 – jathanism 2011-05-05 18:56:49

1

使用古典語法必須注意關閉文件,因此即使在文件處理過程中發生了異常。

恕我直言另一方面,與with聲明,你可以編寫更小的代碼,更易於閱讀,python正在照顧你離開with塊後關閉文件。

2

要回答你的什麼性能優勢的問題,有沒有從嚴格的CPU /內存立場。你的代碼不會有更好的表現,但是在打字的時候它會更強大,並且應該更清晰,因此更容易維護。因此,從某種意義上說,性能增益將以後期維護中的工時爲單位進行衡量,因爲我們都應該知道軟件的真實成本,所以它將具有很好的「性能優勢」。 ;)

相關問題