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.
ich habe neulich eine Euler Aufgabe gelöst und bin dabei über eine Stelle im Code gestolpert die sich überhaupt nicht pythonisch anfühlt. Wie kann ich diesen Code eleganter schreiben?
@Klip: Ich bin der Meinung, daß Dein ursprünglicher Code wesentlich "pythonischer" ist, weil ich ihn, im Gegensatz zu dem von gkuhl, sofort verstehe.
Ich hoffe, Du gewöhnst Dir da nicht künstlich das falsche an.
problembär hat geschrieben:@Klip: Ich bin der Meinung, daß Dein ursprünglicher Code wesentlich "pythonischer" ist, weil ich ihn, im Gegensatz zu dem von gkuhl, sofort verstehe.
Um es böse auszudrücken kann das Programmierwissen eines durchschnittlichen PHP-Coders nicht der Maßstab für Verständlichkeit des Codes sein. reduce und map sind so wunderbare Sprachkonstrukte, dass sie einem nach dem ersten eigenen sinnvollen Verwenden immer wieder als elegante Lösung einfallen.
Ich würde die `reduce()`-Lösung nicht als "pythonischer" bezeichnen, aber auf jeden Fall als eleganter. Python bietet IMHO genau die richtige Mischung aus Bausteinen der objektorientierten und funktionalen Programmierung. Python setzt insgesamt ja sehr stark auf das Iterator/"iterable"-Konzept und `map()`, `reduce()` und der Inhalt vom `itertools`-Modul erlauben es zusammen mit Generatorfunktionen sehr schön "datenstrom-orientierte" Lösungen zu formulieren.
Man kann auch auf `mul` verzichten und stattdessen `lambda` verwenden. `reduce` als built-in sollte man eigentlich kennen. Wobei ich die Existenz auch mal wieder verdrängt hatte:
Panke hat geschrieben:Der Verzicht auf operator.mul ist da aber ein Rückschritt bei der Lesbarkeit.
Sehe ich nicht so. Ob da nun "mul" steht oder eine so einfache selbst definierte Funktion, macht m.E. keinen Unterschied. Wenn irgendjemand damit Schwierigkeiten hat, dann eher wegen des reduce() an sich, das doch befremdlich wirken kann, wenn man funktionales Programmieren nicht kennt.
Ich find's halt lesbarer, wenn da eine Funktion steht, deren Verhalten mir bekannt ist, als wenn ich mir erst noch
überlegen muss, was das für eine anonyme Funktion ist. Das mag in diesem konkreten Beispiel keinen großen Unterschied machen, aber prinzipiell sehe ich das schon so.