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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Edit (Leonidas): Diskussion von "Wann ist es Threadsafe" abgetrennt.

Hallo!

Ich empfehle *with* erst dann, wenn ich es nicht mehr mit
``from __future__ import with_statement`` importieren muss.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann solltest du dir vielleicht 2.5 installieren ;-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

EyDu hat geschrieben:Dann solltest du dir vielleicht 2.5 installieren ;-)
Hallo EyDu!

Neue Server statte ich mit Ubuntu aus sobald die ersten Updates für "Ubuntu 8.04" verfügbar sind. Bis dahin bleibe ich noch bei Debian und bei Python 2.4.4.

Die meisten Kunden habe ich schon auf Python 2.5. Es fehlen nur mehr wenige. Es wird!

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

gerold hat geschrieben:Ich empfehle *with* erst dann, wenn ich es nicht mehr mit
``from __future__ import with_statement`` importieren muss.
Warum?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Leonidas hat geschrieben:
gerold hat geschrieben:Ich empfehle *with* erst dann, wenn ich es nicht mehr mit
``from __future__ import with_statement`` importieren muss.
Warum?
Hallo Leonidas!

Da ich es selber noch nicht verwende, fühlt es sich nicht gut an wenn ich es anderen empfehle. Das ist alles. :-)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

gerold hat geschrieben:Da ich es selber noch nicht verwende, fühlt es sich nicht gut an wenn ich es anderen empfehle.
Ok, dann formuliere ich die Frage anders: warum nutzt du es nicht? Es ist in meinen Augen oft nützlich, im Locking-Beispiel sogar mehr noch als im Dateizugriff-Beispiel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Leonidas hat geschrieben:Ok, dann formuliere ich die Frage anders: warum nutzt du es nicht? Es ist in meinen Augen oft nützlich, im Locking-Beispiel sogar mehr noch als im Dateizugriff-Beispiel.
Hallo Leonidas!

Schade, dass das hier so eine nichtssagende Stammtischdiskussion wird.

Ich verwende keine Future-Imports, da sich diese im Gebrauch für mich so anfühlen, als ob ich Beta-Tester wäre. Ich verwende neue Befehle normalerweise erst dann, wenn sie die ersten Kinderkrankheiten überstanden haben. Ein ``from __future__ import with_statement`` verwende ich also aus Prinzip nicht.

Ich werde das "with"-Statement schon noch kritisch unter die Lupe nehmen. Nur jetzt noch nicht.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

gerold hat geschrieben:Schade, dass das hier so eine nichtssagende Stammtischdiskussion wird.
Thread getrennt, jetzt passts wieder. :)
gerold hat geschrieben:Ich verwende keine Future-Imports, da sich diese im Gebrauch für mich so anfühlen, als ob ich Beta-Tester wäre. Ich verwende neue Befehle normalerweise erst dann, wenn sie die ersten Kinderkrankheiten überstanden haben. Ein ``from __future__ import with_statement`` verwende ich also aus Prinzip nicht.
Future-Imports sind keine Beta-Features, sie sind einfach nur da um die Migration auf neuere Python-Version zu vereinfachen (siehe PEP 236 "Intent"). Es ist so weit ich weiß noch nie passiert dass das was per Future-Import eingeführt wurde, sich später ohne Feature-Import anders verhalten hat, als als es aus __future__ importiert wurde. In den nachfolgenden Python-Versionen ist der __future__-Import quasi implizit.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

EyDu hat geschrieben:Dann solltest du dir vielleicht 2.5 installieren ;-)
Du meinst 2.6. `with` ist erst ab 2.5 verfügbar und muss dort aus Kompatibilitätsgründen explizit importiert werden.

gerold: Wenn du deine Einstellung gegenüber `__future__` etwas zum Offeneren verschoben hast, wirst du vermutlich so wie ich empfinden, dass sich die zusätzliche Zeile lohnt, selbst wenn man `with` nur einmal im Code verwendet.

Und als Motivation: "Veränderung ist gut", "Wer nicht mit der Zeit geht, geht mit der Zeit", $random_spruch_aus_der_abteilung ;)
lunar

Y0Gi hat geschrieben:Und als Motivation: "Veränderung ist gut", "Wer nicht mit der Zeit geht, geht mit der Zeit", $random_spruch_aus_der_abteilung ;)
Naja, es schadet auch nicht, zumindest ein bisschen auf Rückwärtskompatibilität zu achten ;) Nicht alles, was alt ist, ist schlecht, immerhin verwende ich auch ``find``, ``grep`` und ``bash``, bei denen ein Großteil des Codes älter ist als ich selbst ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Nicht alles, was alt ist, ist schlecht, immerhin verwende ich auch ``find``, ``grep`` und ``bash``,
Ja, aber wenn man die heute schreiben würde, würde da wohl brauchbareres rauskommen. find mit seiner seltsamen Syntax, grep mit seinen eher schwachen Regulären Ausdrücken (kein non-greedy, nicht mal in egrep?). Bash ist im Vergleich dazu moderner, aber auch da gibt es bessere Shells, etwa die Z-Shell (ich bin allerdings auch Bash-User, teilweise einfach aus Faulheit). Nicht alles etablierte muss auch stabiler sein.

Gerade das With-Statement ist fein, weil man da nicht vergisst, die Ressourcen freizugeben, wenn man sie nicht mehr braucht. Stell dir vor, hier gebe es jemanden der zu Python 2.2 kompatibel sein will, das wäre auch alles andere als Spaß.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Leonidas hat geschrieben:
lunar hat geschrieben:Nicht alles, was alt ist, ist schlecht, immerhin verwende ich auch ``find``, ``grep`` und ``bash``,
Ja, aber wenn man die heute schreiben würde, würde da wohl brauchbareres rauskommen. find mit seiner seltsamen Syntax, grep mit seinen eher schwachen Regulären Ausdrücken (kein non-greedy, nicht mal in egrep?).
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 ;) ).
BlackJack

Dann ist das aber eine Vergleichbare Situation zum Thema. POSIX `grep` kennt diesen Schalter nicht, der ist also so ähnlich wie der `__future__`-Import.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Kommt euch diese Diskussion nicht auch ein wenig kindisch vor? 8)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

BlackJack hat geschrieben:Dann ist das aber eine Vergleichbare Situation zum Thema. POSIX `grep` kennt diesen Schalter nicht, der ist also so ähnlich wie der `__future__`-Import.
GNU grep ist aber auch schon ein paar Jahrzehnte alt...
lunar

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
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
BlackJack

@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

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:

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