Seite 1 von 1

kurze with-Frage

Verfasst: Sonntag 7. März 2010, 17:31
von heiliga horsd
Hallo Forum,

ich habe eine kurze Frage zum with-Statement:

Bisher habe ich Dateien immer so eingebunden:

Code: Alles auswählen

f = open(foo)
Hatte halt den Vorteil, dass ich bequem mit der variable f arbeiten kann.
Nun das Problem mit with:

bei

Code: Alles auswählen

with open foo as f:
Wenn ich diese (anscheinend bessere) variante verwenden will, muss ich also das ganze Programm um einen Tabulator unter das with-Statement einrücken. Seh ich das richtig?

Lg HH

Verfasst: Sonntag 7. März 2010, 17:34
von cofi
Besser mit 4 Leerzeichen, aber sonst stimmt das.

Verfasst: Sonntag 7. März 2010, 17:38
von heiliga horsd
Macht das IDLE denn nicht automatisch? Tabulator ist halt einfach & schnell.

Das "Programm", bei dem das zum Einsatz kommt, ist eigentlich lediglich eine Funktionssammlung, bei dem die Funktionen einfach aus einer anderen Datei (Hauptprogramm) heraus aufgerufen werden - kann ich da Probleme bekommen?

Verfasst: Sonntag 7. März 2010, 17:49
von derdon
Packe innerhalb des with-statement nur Sachen, die da auch wirklich rein müssen und da hingehören!

Code: Alles auswählen

with open('foo', 'w') as f:
    a = 23
    b = 43
    f.write(a+b)
ist sinnlos, weil die Zuweisungen auch außerhalb des with-statement stehen können.

Das gleiche gilt für try-Blöcke: packe so wenig wie möglich da rein!

Verfasst: Sonntag 7. März 2010, 17:54
von heiliga horsd
Naja, ist halt blöd, weil ich so ziemlich in jeder Funktion den Zugriff auf die Datei brauche und wenn ich im Programm 20x das selbe with drin hab ist das denke ich mal nicht "Don't repeat yourself"-konform, oder?

Verfasst: Sonntag 7. März 2010, 17:58
von Hyperion
heiliga horsd hat geschrieben:Naja, ist halt blöd, weil ich so ziemlich in jeder Funktion den Zugriff auf die Datei brauche und wenn ich im Programm 20x das selbe with drin hab ist das denke ich mal nicht "Don't repeat yourself"-konform, oder?
Wieso übergibst Du dann das File Objekt nicht einfach an andere Funktionen, die dann etwas da rein schreiben?

Generell scheint das aber auch ein suboptimales Design zu sein. Wieso kapselst Du den Zugriff nicht in eine Funktion fürs Lesen und eine fürs Schreiben und rufst diese dann aus den 20 Funktionen heraus auf?

Verfasst: Sonntag 7. März 2010, 18:00
von heiliga horsd
Das ist eine gute Idee, da hätte ich selber drauf kommen können, Danke!
Werd das gleich mal umsetzen!