open file

21/09/2009 - 09:16 von Matthias Huening | Report spam
Hallo,

gibt es eigentlich einen prinzipiellen Unterschied zwischen:

(a)
for zeile in open(datei):
tu_was()

und:

(b)
with open(datei) as f:
for zeile in f:
tu_was()


Ist eine der beiden Möglichkeiten schneller, besser, schöner?
Wenn ja, warum?

Schöne Grüße, Matthias
 

Lesen sie die antworten

#1 Thomas Rachel
21/09/2009 - 09:52 | Warnen spam
Matthias Huening schrieb:
Hallo,

gibt es eigentlich einen prinzipiellen Unterschied zwischen:

(a)
for zeile in open(datei):
tu_was()

und:

(b)
with open(datei) as f:
for zeile in f:
tu_was()


Ist eine der beiden Möglichkeiten schneller, besser, schöner?
Wenn ja, warum?



b) ist schöner. Denn der Kontextmanager von file(), bestehend aus den
Methoden __enter__() (die wohl nur aus dem Äquivalent von return self
besteht) und __exit__() sorgt in letzterer dafür, daß das Objekt
geschlossen wird.

Bei a) wird das Objekt zwar auch (meistens) geschlossen, wenn das
Dateiobjekt "fallengelassen" wird, aber das geht dann über __del__, und
für deren Aufruf gibt es unter gewissen Umstànden keine Garantie (bzw.
es ist sogar spezifiziert, daß sie nicht aufgerufen wird):

http://docs.python.org/reference/da...ct.__del__


Thomas

Ähnliche fragen