Ich glaube, du hast da etwas falsch verstanden. Es ist nicht oberstes Gebot, den Code kurz zu halten. Python-Code soll gut lesbar und auch nach Jahren noch nachvollziehbar sein. -- Dann ist es guter Python-Code.
mfg
Gerold

...Y0Gi hat geschrieben:Ähnlich wie i und j, k und v.
Und dann hast du i und j noch nicht gesehen? Hm... dass du wenig Quelltext gelesen hast, wage ich mal zu bezweifeln - und davon sollte doch durchaus einiges als "gut lesbare Programme" durchgehen können, oder?anyone even hints at breaking the tradition honoured since FØRTRAN of using i, j, and k for indexing variables
Code: Alles auswählen
def create_stuff(x):
sxt = SomeXmlThingy()
sxt.append(x)
sort(sxt)
return sxt
# versus
def create_stuff(x):
someXmlThingy = SomeXmlThingy()
someXmlThingy.append(x)
sort(someXmlThingy)
return someXmlThingy
Da schreibe ich trotzdem `key` und `value`. Es ist noch einen Tick deutlicher und nun wirklich nicht soviel länger.Y0Gi hat geschrieben:k, v: `for k, v in some_dict.iteritems(): print k, '=', v` (kein optimales Beispiel, zugegeben, aber dass da von "key" und "value" die Rede ist, liegt einfach auf der Hand)
Wie ich ja schrieb: Der Kontext macht die Musik.
Ich denke es geht speziell um Python. Zwei verschachtelte Schleifen über Integerwerte kommen da wirklich nicht allzu häufig vor. In anderen Sprachen sind das in der Regel Schleifen, die mit den Indizes auf "Container" zugreifen, wo man in Python direkt über deren Elemente iteriert.Oder, um aus Unmaintainable Code: Naming zu zitieren:Und dann hast du i und j noch nicht gesehen?anyone even hints at breaking the tradition honoured since FØRTRAN of using i, j, and k for indexing variables
Wenn Du Dich an PEP8 bei der Namensgebung gehalten hättest, dann wäre es schon unproblematischer. Beide Varianten leiden daran, dass der Name nicht die Bedeutung beschreibt, sondern den Typ, d.h. wenn `SomeXmlThingy` im Laufe der Zeit durch `SomeJSONThingy` ersetzt wird, dann ist der Name plötzlich "falsch".Um weiter o.g. darzustellenErsteres ist ja wohl deutlich über- und klar ersichtlicher als zweites, bei dem man sogar leicht die Instanz mit dem Klassennamen verwechseln kann.Code: Alles auswählen
def create_stuff(x): sxt = SomeXmlThingy() sxt.append(x) sort(sxt) return sxt # versus def create_stuff(x): someXmlThingy = SomeXmlThingy() someXmlThingy.append(x) sort(someXmlThingy) return someXmlThingy
Hi Y0Gi!Y0Gi hat geschrieben:k, v: `for k, v in some_dict.iteritems(): print k, '=', v` (kein optimales Beispiel, zugegeben, aber dass da von "key" und "value" die Rede ist, liegt einfach auf der Hand)
[...]anyone even hints at breaking the tradition honoured since FØRTRAN of using i, j, and k for indexing variables
Das ist schon ein bischen übertrieben. Man könnte ja auch kürzere Namen finden, die trotzdem aussagen, was darin gespeichert ist. Z.B.:someXmlThingy = SomeXmlThingy()
Code: Alles auswählen
root = XmlThing().get_root()
# oder
article = get_article(1234)
# oder
for adr in cur.fetchall():
print adr["vorname"], adr["nachname"]
Dass genau dieser Kontext für das Verständnis essentiell ist, habe ich glaube ich schon mehrmals geschrieben. Dass solche "super-lokalen" Variablen später verwendet werden sollen, habe ich ebenso wenig befürwortet. Wenn dann auch noch "20 Zeilen weiter unten" die Variable verwendet *würde*, hat man definitiv den Code nicht gut aufgeteilt. Wenn Programme wachsen, muss man beim Refactoring auch schon mal ein paar Variablennamen anpassen, *wenn* es denn sein muss.gerold hat geschrieben:Was du dir mit ``k`` gedacht hast, ist nur im direkten Kontext ermittelbar.
In ihrem - sehr kleinen - Kontext(sic!) sind die Namen sehr wohl aussagekräftig, da braucht man keine zehn Zeilen nach oben oder unten springen, um deren Bedeutung zu erfahren.gerold hat geschrieben:Durch die Verwendung von nicht aussagekräftigen Variablenamen zwingst du andere oder später auch dich selbst dazu, mehr Code durchlesen zu müssen, um herauszufinden was den jetzt wirklich in k, x oder v drinnen steht.
Das habe ich ebensowenig befürwortet!gerold hat geschrieben:Das Problem ist nicht das Verwenden von solchen Kurzbezeichnern in einfachen Schleifen, sondern die Verwendung von Kurzbezeichnern in komplexeren oder längeren Algorithmen.
Hi Y0Gi!Y0Gi hat geschrieben:Das riecht mir persönlich hier zu sehr schon nach Glaubenskrieg, obwohl wir vermutlich zu großen Teilen identische Ansichten haben. Insgesamt halte ich PEP 8 für ein sehr wichtiges "Feature von Python" und ich bin ebenso erfreut wie erstaunt, dass sich doch so viele Leute zu sehr großen Teilen daran halten. Dagegen ist das, was übrig bleibt, schon kaum mehr der Rede wert.
Jepp, jetzt halte ich mich auch dran. Vorher hatte ich ca. EOL90 und jetzt EOL79. Wen etwas länger ist als 79 dann breche ich einfach um. Bei Parametern die ich per Keywords übergebe, wird das jeder Parameter ehe von mir umgebrochen, weil es schöner aussieht.oliver1974 hat geschrieben:Mein erster Post hier im Forum und dann gleich mal hier voll einsteigen...
![]()
An die Regel von wegen 80 Zeichen Länge.. Haltet Ihr euch wirklich dran?
Das ist SEHR kurz, wie ich finde.....
Naja, ich meine z.B. die Eingabeaufforderung (DOS-Box) von Windows oder die Shell unter Linuxbirkenfeld hat geschrieben:Von was für Konsolen redet ihr hier eigentlich alle? Die, die ich kenne, haben alle variable Größe oder sind ziemlich viel breiter als 80 Zeichen.
Ich habe die schon ein paar mal für `svn` benutzt und mir dabei auch Diffs angeschaut. Auf dem Rechner war leider kein `xterm` und keine `bash` und das `svn` habe ich auch auf einem USB-Stick selbst mitgebracht.birkenfeld hat geschrieben:Also wer unter Windows die Eingabeaufforderung zum Editieren oder Code anzeigen verwendet, den musst du mir erst noch zeigen.
Bei mir ist die Eingabeaufforderung 130 Zeichen breitXtraNine hat geschrieben:birkenfeld hat geschrieben:Bei Linux bin ich mir nicht sicher (habe ich nicht), aber bei Windows hat die Eingabeaufforderung einen EOL von 80.