gerold hat geschrieben:Da jetzt das neue Statement von vielen Leuten verwendet wird, ist vielleicht noch etwas aufgefallen was man besser machen könnte -- zumindest im Hintergrund. Das muss aber nicht sein.
Wie auch immer. In der nächsten Version ist der Future-Import nicht mehr nötig. Die Programmierer hatten genug Zeit, alte Programme zu bereinigen und zu testen. Dem Einsatz des neuen Statements steht nichts mehr im Wege.
Es gibt aber auch programmierer, die sich weitern die zu nutzen und dann eben die Erfahrungen in Python 2.6 machen werden müssen. Oder es komplett ignorieren, denn dass ``with`` ein Keyword ist, werden die wenigsten merken.
gerold hat geschrieben:Hinter "with" steht ja nicht nur dieses eine Wort. Dahinter steht die jetzt neu in Python eingebaute Möglichkeit, eigene Objekte so zu erweitern, dass diese auch mit "with" verwendet werden können. Und diese neuen Möglichkeiten enden erfahrungsgemäß in komplizierterem Python-Code.
Nein. Um etwa Objekte, die ``close()`` implementieren sauber anzusprechen reicht ein einziger Aufruf von ``contextlib.closing()``.
Außerdem wird der Code einfacher zu lesen und generell stabiler. So ist dieser Ausschnitt:
Code: Alles auswählen
with open('/etc/passwd', 'r') as f:
for line in f:
print line
äquivalent zu diesen:
Code: Alles auswählen
f = open('/etc/passwd', 'r')
try:
for line in f:
print line
finally:
f.close()
Wer von euch öffnet Dateien auf diese Weise, die Sichergeht, dass die Datei auch bei fehlern geschlossen wird. Wer von euch vergisst sowas gerne?
gerold hat geschrieben:Python-Programme, die Dekoratoren definieren, sind ja auch komplizierter geworden. Nur fällt das denen, die so etwas fabrizieren, nicht mehr auf. Und so etwas gefällt nicht unbedingt jedem einfachen Praktiker oder Hobby-Programmierer. Erst recht nicht, wenn man das Gleiche erreicht, indem man ein wenig anders programmiert.
Im Gegensatz zu Dekoratoren sind Context-Manager aber wesentlich einfacher zu schreiben, ich war da selbst erstaunt, dass das Interface so komfortabel war. Es sind im großen und ganzen ja nur Codeblöcke mit Pre- und Postconditions, so etwas kann man mit Funktionen und Dekoratoren nachbauen, wenn man masochistisch genug ist.
Das kann man etwas mit Unicode vergleichen: die Programme zu verstehen wird etwas komplizierter (aber nicht sonderlich, denn wie gesagt - Context Manager sind einfach zu verstehen) dafür macht es das Programm einfacher. Ich finde es super, dass Python 3.0 Unicode durchweg verwendet, denn dann fallen viele Möglichkeiten weg, an zufälligen Stellen wegen Umlauten zu crashen. Mit Context Managern falen Probleme mit Finalizing weg, da dass dann automatisch geschieht.
EDIT by Gerold: Hallo Leonidas! Ich hatte, statt auf den Zitat-Knopf, auf den EDIT-Knopf gedrückt und so deinen Beitrag überschrieben. Ich hatte den Beitrag zum Glück noch im Firefox-Cache und konnte ihn rekonstruieren. -- Sorry!