Gibt es eine Leistungsdifferenz oder Stilpräferenz zwischen diesen beiden Schreibweisen von Anweisungen? Es ist im Grunde dasselbe, die 1 Bedingung wird nur einmal erfüllt, während die andere Bedingung zu jeder anderen Zeit erfüllt wird. Sollte die Bedingung, die nur einmal erfüllt wird, erster oder zweiter sein? Macht es einen Leistungsunterschied? Ich bevorzuge den 1. Weg, wenn die Leistung gleich ist.
%Vor%vs
%Vor%Nun, versuchen wir es:
%Vor%Wir bekommen:
%Vor%Nein, nicht viele Unterschiede hier. Selbst bei einem größeren x sind die Unterschiede minimal.
Ich muss sagen, dass ich etwas überrascht bin. Ich hätte erwartet, dass die direkte Version ( f
) etwas effizienter ist als die not
version ( g
).
Moral: Mach was du willst.
Es sollte keinen Leistungsunterschied geben (wenn überhaupt, denke ich, dass der zweite weniger leistungsfähig wäre), aber benutze einfach den, der dir klarer ist. Ich mag den ersten auch besser. :)
Wenn Sie merken, dass es später einen Unterschied macht, dann machen Sie weiter und ändern Sie es, aber Sie wissen, was sie sagen: vorzeitige Optimierung ist die Wurzel allen Übels.
Andere haben festgestellt, dass Lesbarkeit (in der Regel) wichtiger ist und dass Sie die Vorlage nicht wirklich benötigen. Außerdem gibt es die alte Säge: "Vorzeitige Optimierung ist die Wurzel allen Übels" .
Das heißt, der beste Weg, um die Leistung herauszufinden, ist zu testen. Also habe ich Ihre beiden Beispiele in Funktionen eingefügt (indem range[0,1023]
in range(0, 1023)
geändert wurde, damit die Dinge funktionieren), benannte das erste Beispiel 'ohne_not' und das zweite Beispiel'ohne_not 'und erstellte ein einfaches Hauptprogramm, das mit Testmodul :
Dann habe ich mehrere Tests durchgeführt. Wie ich und andere Beantworter erwartet haben, lief die Version ohne not
in jedem Test ein wenig - etwa 0,6% - schneller; nicht genug, um sich Sorgen zu machen, IMO. (Nun, es mag einige Fälle geben, in denen es darauf ankommt, aber wenn das der Fall wäre, würde ich C oder eine andere kompilierte Sprache empfehlen.)
Ich kann das nicht überprüfen, aber wenn ich gesunden Menschenverstand verwende, würde ich denken, dass der erste etwas besser abschneiden würde. Die zweite bewertet die & lt; und dann bewertet es das nicht. Das ist eine zusätzliche Operation. Und es tut es jedes Mal. Plus intuitiv macht das erste mehr Sinn.
Wenn es einen Leistungsunterschied gibt? Ja, der Prozessor muss bei if-else-Anweisungen einen vorhersagbaren Sprung ausführen. Werden Sie den Unterschied bemerken? auf keinen Fall. Ihr Compiler / Optimierer wird Ihren Code vor der Ausführung auf den Kopf stellen. Ihre Berechnung wird wahrscheinlich nicht ein paar tausend Jahre dauern, um es wichtig zu machen. Sie verwenden wahrscheinlich sogar kein Echtzeitsystem.
wie andere sagten: Konzentrieren Sie sich auf Lesbarkeit, optimieren Sie keine unwichtigen Teile
Tags und Links python performance coding-style if-statement