Defnull hat geschrieben:Gibt es sonst noch hartnäckige Optimierungs-Mythen oder vielleicht auch Tricks, die wirklich was bringen? In diesem Thread könnten wir sie ja mal sammeln.
Ich glaube nicht, dass dabei so wirklich viel herauskommt. Gerade was die Zeichenkettenkonkatenation angeht, gibt es dazu bereits mindestens einen längeren Thread hier im Forum (ca. Herbst 2009), der verschiedene Aspekte beleuchtet und wo unter dem Strich herauskommt, dass viel von der konkreten Python-Implementation abhängt.
Ich habe in den letzten Monaten die ein oder andere Aufgabe bei
SPOJ mittels Python gelöst und da kommt man bei einigen Aufgaben um reichlich Performance-Optimierung nicht umhin, um innerhalb des gegenbenen Zeitlimits mit einer Python-Lösung durchzukommen. Dabei musste ich z.B. feststellen, dass es z.B. bei join() und "+" davon abhängt, wie lang die schon existierende Zeichenkette ist, an die angehängt wird, wie lang die Zeichenketten sind, die angehängt werden und wie oft angehängt wird.
Manches hängt auch davon ab, ob psyco verwendet wird oder nicht, denn nicht alles, was ohne psyco die performantere Lösung ist, gilt auch für psyco.
Gelegentlich wird hier im Forum zum Thema "Tupel und Listen" darauf verwiesen, dass Tupel aufgrund ihres immutablen Charakters effizienter (implementierbar?) sind. Was die Performance angeht, so habe ich die Erfahrung gemacht, dass in aller Regel die Verwendung von Listen performanter ist.
Was die lookups angeht. In vielen Fällen ist die Verwendung von lokalen Variablen performanter als die von globalen. Insbesondere bei größeren Datenstrukturen gilt das aber nicht unbedingt (so jedenfalls meine Erfahrung). Speziell bei der Verwendung von Arrays (ja, ich meine Arrays!) kann es performanter sein, nur ein globales Array zu erzeugen (die Erzeugung großer Arrays ist nämlich erheblich teurer als die von Listen) und es ggf. innerhalb einer Funktion nur neu zu initialisieren statt es immer wieder neu (lokal) zu erzeugen.
Ja, natürlich weiß ich, dass es numpy & co gibt, aber bei SPOJ hilft das z.B. nicht ...