mcdwerner hat geschrieben:Bis jetzt hab ich mich gescheut solche "Kleinigkeiten" in Funktionen auszulagern, da ich hier im Forum mal gelesen habe, dass Funktionsaufrufe in Python recht teuer sind [...]. Wie handhabt ihr das?
Ich programmieres es so, dass es für mich möglichst klar und übersichtlich aussieht, was typischerweise viel kleine Funktionen beinhaltet. Dazu schreibe ich Tests und verwende coverage.py. Falls es mir danach zu langsam erscheint, benutze ich cProfile. Danach suche ich für die Flaschenhälse bessere Algorithmen bzw. Datenstrukturen. Wenn ich es umgebaut habe, lasse ich die Tests laufen und fixe danach alle Bugs, die ich inzwischen eingebaut habe. Wenn ich mit der Geschwindigkeit zufrieden bin, bin ich fertig, wenn nicht, fange ich wieder mit cProfile an und wiederhole den Prozess solange, bis ich zufrieden bin, oder merke, dass ein ganz anderer Ansatz her muss. Dann suche ich einen solchen Ansatz und fange ganz von vorne an. Genügend Entwicklungszeit vorausgesetzt, natürlich.
Ansonsten muss man halt mit einem langsamen Programm leben, das aber oft so langsam gar nicht ist, weil "langsam" für den Benutzer oft etwas ganz anderes bedeutet, als für den Programmierer. Schnell für den Benutzer ist zB., wenn das Programm sofort startet und einen nicht minutenlang mit einem Splash Screen belästigt. Oder wenn es schnell auf Benutzereingaben reagiert. Wenn dann einzelne Funktionen länger dauern, hat der Benutzer den Eindruck, dass hier eine komplexe Berechnung in einem schnellen Programm stattfindet, die eben ihre Zeit benötigt. Im umgekehrten Fall, dass das Programm den Eindruck von Zähigkeit hinterlässt, aber ein paar hochoptimierte Funktionen besitzt, wird der Benutzer das gesamte Programm als langsam empfinden. Die Lehre daraus ist, dass man beim Optimieren auf das achten sollte, auf das auch der Benutzer achtet. Man sollte zwar so wie oben beschrieben optimieren, aber das alleine genügt nicht. Man muss den Benutzern über die Schulter schauen.
Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.