Guter Code Stil

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.
Antworten
Benutzeravatar
cryzed
User
Beiträge: 82
Registriert: Samstag 28. März 2009, 15:53

Hey, Ich weiß es gibt PEP-8 und das "import this" aber gibt es daneben noch irgendwas an Dokumentation was man mit seinem Code tun und lassen sollte? Z.b folgendes:

Code: Alles auswählen

#!/usr/bin/env python

import os

def main():
    if not os.path.exists("test.txt"):
        test = open("test.txt", "w")
    test = open("test.txt", "a")

def main2():
    if os.path.exists("test.txt"):
        test = open("test.txt", "a")
    else:
        test = open("test.txt", "w")
Was würdet ihr benutzen? Ich finde main() an sich schöner und kompakter, macht aber 2 potentielle Zugriffe auf die test.txt. main2() sieht meiner Meinung nicht so toll aus ist aber wahrscheinlich potentiell schneller. Es gibt viele Dinge wo ich mir nicht ganz sicher bin. Z.b prüfe ich besser bei einer if bedingung auf false (not) oder auf true? Kann ich das built-in "file" überschreiben weil ich eh "open" verwende und innerhalb meines programms gar nicht gebrauche? Wenn ich über eine Liste von Dateien iteriere benutze ich als iterator "file_", "f" oder sonst eine Abwandlung? Ist es eine gute Idee einfach "i" als iteratorvariable zu benutzen so wie es oft in C++/C gemacht wird, oder sollte ich den Anfangsbuchstaben des jeweiligen Objekts benutzen? (File, f; Person, p)...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

test = open("test.txt", "a+")
Eigentlich würde man keine deiner Versionen benutzen, dass würde man über ein try-except lösen. Nach dem Test und vor dem Öffnen könnte die Datei immerhin gelöscht werden.

Edit: Entweder hast du nachbearbeitet, oder ich habe deinen restlichen Text übersehen:

Um Geschwindigkeit solltest man sich erstmal keine Gedanken machen. Ob nun ein open oder zwei ist relativ egal.

Wie du deine Bedingungen bei if gestaltes, ob mit not oder ohne, ist relativ egal. Mit einer einfachen Negation sollte jeder zurecht kommen.

built-ins solltest generell nicht überschrieben werden. Nur weil sie momentan nicht gebraucht werden, heißt es nicht, dass sie später im Code vielleicht doch nützlich sind. Außerdem erschwerst du damit anderen das Lesen deines Codes.

Beim Iterieren solltest du den Namen so wählen, dass er etwas über die Bedeutung aussagt. Da ist "file_" ein äußerst schlechter Name. Bennene es lieber danach, was sich in der Datei befindet, oder was damit gemacht wird. Das gilt für alle Namen. Btw.: Der Iterator ist nicht der Name (linke Seite der for-Schleife), sondern das "Ding" welches über die Werte iteriert (rechte Seite). Was das "i" angeht, gibt es sicher tausend Meinungen. Für einfache Indizes nutze ich "i", viele andere werden "index" schreiben. Das mit den Anfangsbuchstaben ist an sich eine ganz schlechte Idee, dort gilt wieder die Namenswahl nach Bedeutung.
Das Leben ist wie ein Tennisball.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Wieso das ``+`` ??

Code: Alles auswählen

test = open("test.txt", "a")
Legt die Datei an, wenn sie nicht vorhanden ist. Macht doch kein Problem aus etwas, das gar kein Problem ist.
Benutzeravatar
cryzed
User
Beiträge: 82
Registriert: Samstag 28. März 2009, 15:53

ice2k3 hat geschrieben:Wieso das ``+`` ??

Code: Alles auswählen

test = open("test.txt", "a")
Legt die Datei an, wenn sie nicht vorhanden ist. Macht doch kein Problem aus etwas, das gar kein Problem ist.
Tut es nicht. Auf jeden Fall nicht unter Linux.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Und mit dem + gehts?

Edit: Mir fällt gerade ein, bei mir ging das auch schon unter Linux!
Benutzeravatar
cryzed
User
Beiträge: 82
Registriert: Samstag 28. März 2009, 15:53

ice2k3 hat geschrieben:Und mit dem + gehts?

Edit: Mir fällt gerade ein, bei mir ging das auch schon unter Linux!
Merkwürdig, du hast Recht. In Python 2.5.x wurde immer eine Exception geworfen...
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

cryzed hat geschrieben:
ice2k3 hat geschrieben:Und mit dem + gehts?

Edit: Mir fällt gerade ein, bei mir ging das auch schon unter Linux!
Merkwürdig, du hast Recht. In Python 2.5.x wurde immer eine Exception geworfen...
Nein, das hat auch schon unter 2.5 und Linux ohne + funktioniert. Und auch bei den Versionen davor. Muß also andere Gründe gehabt haben ...
lunar

EyDu hat geschrieben:Eigentlich würde man keine deiner Versionen benutzen, dass würde man über ein try-except lösen. Nach dem Test und vor dem Öffnen könnte die Datei immerhin gelöscht werden.
Ein "try … except …" ist auch nicht atomar. Zwischen dem Abfangen der Ausnahme und dem weiteren Zugriff könnte die Datei ebenfalls gelöscht oder verändert werden.

Edit: "a" und "a+" erzeugen unter Linux immer eine neue Datei, wenn diese nicht existiert. Das ist durch die Dokumentation der C-Funktion fopen() garantiert, auf die die Python-Dokumentation zu open() verweist.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würde das so in der Art machen:

Code: Alles auswählen

with open('test.txt', 'a') as testfile:
    testfile.write(data)
Antworten