With-Statement

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lunar

Samstag 26. April 2008, 19:14

gerold hat geschrieben:Kommt euch diese Diskussion nicht auch ein wenig kindisch vor? 8)
Wir können dir ja nicht alle an Weisheit ebenbürtig sein, dann wärst du ja nix besonderes mehr ;)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 26. April 2008, 19:18

lunar hat geschrieben:Also mein grep versteht per ``--perl-regexp`` auch Perl-artige reguläre Ausdrücke und die sollten non-greedy Matching eigentlich können (behaupte ich einfach mal, ohne das probiert zu haben ;) ).
Hmm, habe jetzt auch nachgeschaut, das kannte ich noch nicht (lt. man page "this feature is highly experimental" - wird vermutlich auch in BSD grep nnicht drin sein), ich finds gut :) Und ja, die Analogie zum With-Statement besteht, nur ist das with_statement nicht expreimentell und somit gibt es noch weniger Gründe das nicht zu nutzen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Samstag 26. April 2008, 20:58

@gerold: Nö kommt mir nicht kindisch vor. Wer's sagt ist's selber! Bäääh. Du bist doof, mit Dir spiel' ich nich' mehr. Das hast'e jetzt davon. =8o)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Samstag 26. April 2008, 22:00

gerold hat geschrieben:Kommt euch diese Diskussion nicht auch ein wenig kindisch vor? 8)
Wenn sie geholfen hat, deine falsche Auffassung von Future-Imports zu korrigieren, war sie doch zu etwas nütze, oder?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 26. April 2008, 23:06

Hallo!

Es wird etwas vorgeschlagen und besprochen.

Dann wird es in die neue Python-Version einprogrammiert. Und damit es interessierte Leute in neuen Programmen verwenden können, ohne dass durch die Einführung des neuen Statements (z.B. "with") irgend ein altes Programm nicht mehr funktioniert, welches evt. "with" ganz anders verwendet, kann es nur über einen Future-Import aktiviert werden.

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.

Und während dieser Zeit hat man dann genug Zeit um Leute blöd anzumachen, wenn diese Leute Future-Imports aus Prinzip nicht verwenden, da sie sich nicht damit befassen möchten.

----

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.
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.

Man muss den Leuten Zeit lassen sich diese Neuerungen anzusehen, sich einzuarbeiten und herauszufinden ob diese Neuerungen verwendbar, gut oder totaler Schrott sind. Und bevor ich ein Fass für "with" aufmache, muss es sich bewähren und es muss ohne Future-Import verwendbar sein. Und wem das nicht passt, der soll sich selber ins Knie beißen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sonntag 27. April 2008, 08:27

Dass neue Features Änderungen mit sich bringen, und Programmierer sich auf sie einstellen müssen, ist klar. Nur gilt das nicht nur für Features, die mit einem Future-Import aktiviert werden müssen. Es gab zum Beispiel keinen Future-Import für dein anderes angeführtes Beispiel, die Dekoratoren -- die waren direkt in 2.4 eingeführt und verwendbar.

Ganz allgemein gesprochen: Ein Future-Import sagt *nichts*, aber auch *gar nichts* über die Stabilität oder die Komplexität eines neuen Features aus, sondern lediglich, dass es nicht zu 100% backwards-compatible ist (bei "with" eben wegen dem neuen Keyword). Deshalb verstehe ich es nicht, an diesem Import die "Verwendbarkeit" festzumachen.

Und warum "with" mit einem Lock komplizierter ist als acquire, try-finally und release, musst du mir auch erklären.

Mein Knie brauche ich übrigens noch.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 27. April 2008, 08:38

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!
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 27. April 2008, 10:17

Leonidas hat geschrieben:Im Gegensatz zu Dekoratoren sind Context-Manager aber wesentlich einfacher zu schreiben, ich war da selbst erstaunt, dass das Interface so komfortabel war.
Hallo Leonidas!

Das ist mal ein Wort! :-) Ich freue mich, wenn sich mein Vorurteil in dieser Sache nicht bestätigt.

@All: Ich habe doch nicht behauptet, dass "with" schlecht ist!
Ich habe nur behauptet, dass ICH mir "with" (aus den verschiedensten Gründen) erst ein wenig später rein ziehen werde. Und ICH es erst empfehlen kann, wenn ich mich damit befasst habe. Das hindert euch doch nicht daran, "with" zu verwenden und zu empfehlen.

Wenn ich ein Codebeispiel ohne "with" schreibe, dann genügt es ja, wenn irgendjemand von euch dem "with" am Herzen liegt, in einem weiteren Beitrag dazu schreibt, dass man ab Python 2.5, durch die Einführung des "with"-Schlüsselwortes den Code auch anders schreiben kann.

Aber nein, stattdessen wird großes Trara darum gemacht, weil ich keine Zeit dafür habe mich damit zu befassen und es in meinen Codebeispielen noch nicht verwende. Vielen, vielen Dank!
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sonntag 27. April 2008, 10:24

Sorry, aber du reagierst hier, als wenn wir dich extra persönlich beleidigen wollten. Dem ist nicht so. Hättest du auch anfänglich nur sowas geschrieben:
weil ich keine Zeit dafür habe mich damit zu befassen und es in meinen Codebeispielen noch nicht verwende
hätte es sicher auch keinen so langen Thread gegeben.

Statt dessen hast du behauptet, Features aus Future-Imports wären in einer Art Beta-Phase und hätten potentiell Kinderkrankheiten. Das haben wir richtiggestellt.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 27. April 2008, 10:28

birkenfeld hat geschrieben:Statt dessen hast du behauptet, Features aus Future-Imports wären in einer Art Beta-Phase und hätten potentiell Kinderkrankheiten.
Dass man es so auffassen könnte, stimmt auch wieder. :roll: Ich wollte in den vorherigen Beiträgen nur klar stellen, warum ich mir nicht jetzt schon die Zeit nehme, mich um "with" zu kümmern.
Zuletzt geändert von gerold am Sonntag 27. April 2008, 10:37, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

Sonntag 27. April 2008, 10:33

*popcornwiedereinpack* ... und ich hatte mich schon so doll auf einen schönen Flamewar gefreut :?
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 28. April 2008, 08:47

Hab mal [wiki]Tutorial/with[/wiki] erstellt ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten