Seite 2 von 2
Verfasst: Freitag 29. Dezember 2006, 14:07
von lunar
Leonidas, du zitierst die Doku der älteren Versionen 2.2 und 2.3. Offenbar hat man da noch geglaubt, dass file() open() ablösen wird. Davon ist in neueren Versionen der Doku, wie du an meinen Zitaten gesehen hast, nicht mehr die Rede.
Im Gegenteil, es ist sogar eher wieder eine gegenläufige Tendenz zu spüren:
Python 2.4.4 sagt noch: "Both spellings are equivalent. The intent is for open() to continue to be preferred for use as a factory function which returns a new file object."
Das würde ich so übersetzen, dass open() und file() prinzipiell gleichwertig sind. open() ist zwar eher als Factory-Funktion für file Objekte gedacht, aber das ist hier noch mehr eine Entscheidungshilfe als eine wirkliche Empfehlung.
Python 2.5 geht aber noch einen Schritt weiter und sagt: "When opening a file, it's preferable to use open() instead of invoking this constructor directly."
Das würde ich nun so interpretieren, dass es in Python 2.5 sogar deutlich empfohlen ist, open() zum Öffnen von Dateien zu verwenden.
Ich halte mich im Zweifel an die neuen Versionen der Dokumentation. Python 2.2 und 2.3 sind heute nicht mehr aktuell. Wenn ich ehrlich bin, muss ich sogar zugeben, dass ich - von Java kommend - am Anfang auch eher zu file() tendiert habe. Da ich aber mit Python 2.4 angefangen habe, bin ich auf die schon zitierten Stellen in der Dokumentation gestoßen und verwende seit dem open(), was mir heute auch logischer als file() erscheint.
Gruß
lunar
Verfasst: Freitag 29. Dezember 2006, 14:27
von Leonidas
Ich weiß, die seltsame Kursänderung ist mir auch aufgefallen, daher habe ich in der alten Dokumentation gegraben um das belegen zu können.
Nichts desto trotz wurde für keine Alternative jemals eine Deprecation ausgesprochen und daher denke ich, dass sich das Verhalten von file() und open() in Python 2.x nie ändern wird.
Was ich jetzt ausgegraben habe, sind ein paar Posts in python-dev:
file() vs open(), round 7 welches der Follow-Up-Thread zu
file() or open()? ist. Muss ich mir mal durchlesen, dann können wir uns weiterstreiten

Verfasst: Freitag 29. Dezember 2006, 15:39
von sape
Ich weiß auch nicht aber ist vielleicht für File sowas geplant?
Leonidas hat geschrieben:
lunar hat geschrieben:Klar, aber bei file() denke ich nicht sofort daran, dass man eine Datei zum Lesen oder Schreiben öffnen will. Ich halte das eher für eine abstrakte Betrachtung einer Datei; also etwas, bei dem man Namen, Erweiterung oder Pfad abfragen kann...
Da hast du recht. Wenn ich es mir so überlege, könnte das FIle-Objekt so eine Funktionalität durchaus auch bereitstellen. Das wäre logisch: über das FIle-Objekt bekommt man den Namen, die Attribute und den Inhalt einer Datei.
Das wäre für mich ein Argument mehr ``file`` zu nutzen.
Verfasst: Freitag 29. Dezember 2006, 15:53
von Leonidas
sape hat geschrieben:Ich weiß auch nicht aber ist vielleicht für File sowas geplant?
BlackJack meinte, dass es im Gespräch für Python 3k war, aber so wie ich es sehe hat Guido
hier gemeint, dass es für CPython theoretisch möglich wäre. Ist alledings mit
einer Menge Komplikationenen verbunden.
Interessanterweise ist dieser Thread bisher quasi eine Übsersetzung des Python-Dev Threads "file() or open()". Die Argumente sind ziemlich ähnlich, nur die Sprache ist anders

Verfasst: Freitag 29. Dezember 2006, 20:55
von sape
Das mit ``open()``, dass geplant ist das es andere Sachen wie URLs öffnen kann, habe ich ja schon hier im Thread mitgekriegt das es für Python 3K geplant ist. Mich würde aber interessieren, ob vielleicht irgendwann das ``file`` Objekt um solche Sachen erweitert werden die lunar angepsrochen hat. Das würde ich persönlich auch sehr logisch finden

Dan bräuchte man z.B. nicht mehr ``os.stat`` sondern hat dann alles in der Instanz von ``file``.
lg
sape
P.S:
Interessanterweise ist dieser Thread bisher quasi eine Übsersetzung des Python-Dev Threads "file() or open()". Die Argumente sind ziemlich ähnlich, nur die Sprache ist anders

Was für ein glück, dann muss ich mir das nicht übersetzen

*gg
Verfasst: Freitag 29. Dezember 2006, 22:00
von BlackJack
Das `path` Modul von Jason Orendorff bietet diese Funktionalität heute schon.
Verfasst: Samstag 30. Dezember 2006, 07:12
von Y0Gi
Eine Zeit lang habe ich auch versucht, file() statt open() zu verwenden, zumal file() ja auch die eigentliche Funktion ist und open() nur der Alias (im weiteren Sinne).
Welcher der beiden Namen besser zutrifft, hängt letztlich von der Betrachtungsweise ab, beides mehr oder weniger von Fall zu Fall.
Letztlich ist aber open ein Verb und damit definitiv PEP8-konformer.
Für open() spricht zudem POLS (Principle of Least Surprise), d.h. dass es in eingen anderen Sprachen (Perl fällt mir ein) auch so heißt.
Verfasst: Samstag 30. Dezember 2006, 11:01
von Leonidas
Y0Gi hat geschrieben:Für open() spricht zudem POLS (Principle of Least Surprise), d.h. dass es in eingen anderen Sprachen (Perl fällt mir ein) auch so heißt.
Das würde auch für chomp() gelten.. klingt sogar wie ein Verb. Will ich aber trotzdem nicht in Python sehen

Verfasst: Samstag 30. Dezember 2006, 11:23
von Y0Gi
Wozu chop() und chomp(), wenn es "".[l/r]strip([chars]) gibt?
Verfasst: Samstag 30. Dezember 2006, 12:22
von Leonidas
Y0Gi hat geschrieben:Wozu chop() und chomp(), wenn es "".[l/r]strip([chars]) gibt?
Eben. Wir streiten uns hier um den Sinn und Unsinn der Namen open() und file(). Mein Argument ist, dass übernehmen von Namen aus anderen Programmiersprachen nicht immer eine gute Idee ist. Die Ruby-Leute haben
genau dazu einen Thread.
Übrigens, in Rubys Stdlib ist es durchaus so, dass eine Funktion mehrere Namen hat und die Leute die selbe Funktion mit verschiedenen Namen nutzen. Ist in Python quasi undenkbar, wie man schon an dieser Diskussion sieht

Verfasst: Samstag 30. Dezember 2006, 13:01
von lunar
Leonidas hat geschrieben:Y0Gi hat geschrieben:Wozu chop() und chomp(), wenn es "".[l/r]strip([chars]) gibt?
Eben. Wir streiten uns hier um den Sinn und Unsinn der Namen open() und file(). Mein Argument ist, dass übernehmen von Namen aus anderen Programmiersprachen nicht immer eine gute Idee ist. Die Ruby-Leute haben
genau dazu einen Thread.
Ist in Python quasi undenkbar, wie man schon an dieser Diskussion sieht

Heißt es nicht irgendwo
"There should be only one way to do it"?
Verfasst: Samstag 30. Dezember 2006, 13:18
von Leonidas
lunar hat geschrieben:Heißt es nicht irgendwo "There should be only one way to do it"?
Ja, im Zen of Python.
Zen of Python hat geschrieben:There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Der Zen ist irgendwie ein Meisterstück.
Verfasst: Samstag 30. Dezember 2006, 13:41
von lunar
Leonidas hat geschrieben:lunar hat geschrieben:Heißt es nicht irgendwo "There should be only one way to do it"?
Ja, im Zen of Python.
Danke, ich hatte den Namen vergessen. (Frag mich nicht warum, aber irgendwie war ich die ganze Zeit auf "python mantra" fixiert

)
Leonidas hat geschrieben:Zen of Python hat geschrieben:There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Der Zen ist irgendwie ein Meisterstück.
Ist das jetzt Ernst oder Sarkasmus?
Verfasst: Samstag 30. Dezember 2006, 14:15
von Leonidas
lunar hat geschrieben:Ist das jetzt Ernst oder Sarkasmus?
Das ist durchaus ernst - je länger man Python kennt, desto mehr versteht man die Botschaft des Zens. Es ist die Philosophie von Python, gebannt ein einige Zeilen lyrischen Text. Originell, witzig, hilfreich.
Verfasst: Samstag 30. Dezember 2006, 14:22
von lunar
Leonidas hat geschrieben:lunar hat geschrieben:Ist das jetzt Ernst oder Sarkasmus?
Das ist durchaus ernst - je länger man Python kennt, desto mehr versteht man die Botschaft des Zens. Es ist die Philosophie von Python, gebannt ein einige Zeilen lyrischen Text. Originell, witzig, hilfreich.
Sehr gut, so sehe ich das nämlich auch

Andernfalls hätten wir nämlich gleich die nächste Diskussion anfangen können

Verfasst: Samstag 30. Dezember 2006, 15:03
von BlackJack
Dann muss ich mir also nicht komisch vorkommen, dass ich es ausgedruckt und neben den Monitor an die Wand gehängt habe.
Der Geist, der in diesen Zeilen steckt ist IMHO letztendlich nicht auf Python beschränkt sondern recht universell.
Verfasst: Samstag 30. Dezember 2006, 15:12
von lunar
BlackJack hat geschrieben:Der Geist, der in diesen Zeilen steckt ist IMHO letztendlich nicht auf Python beschränkt sondern recht universell.
Das erzähl' mal einem Perl-Guru

Verfasst: Samstag 30. Dezember 2006, 17:25
von sape
Leute wir sind hier immer noch am Programmieren und Python ist keine Religon sondern ein Programmierer-Werkzeug

Zugegeben, für mich momentan das beste

Davon abgesehen (von dem ganzen Pseudo- Religions-gedöns-blubb den einigen reininterpretieren) ist Pythons Zen schon recht gut und
so einfach das jeder darauf kommen hätte können (gerade die Einfachheit
und Schlüssigkeit macht es so Sympatisch)
Mir gefällt ja sehr gut ->
"3. Einfach ist besser als komplex." 
in Verbindung mit
"4. Komplex ist besser als kompliziert." 
Gerade die Sätze lassen viel Freiraum, weil ein jeder weiß, das Problemlösungen sich nicht immer Einfach formulieren lassen, sonder auch oft Komplex sein müssen, (weil es eben nicht anders geht) aber niemals Kompiliert sein müssen! So nach dem Moto
"17. Wenn die Implementierung schwer zu erklären ist, ist sie keine gute Idee."
lg