Performance oder Stilunterschied zwischen "if" und "if not"?

7

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%     
ss41153 01.10.2012, 19:55
quelle

7 Antworten

9

In Ihrem Beispiel wird if gar nicht benötigt:

%Vor%

Ich denke, das ist der effizienteste Weg in Ihrem Fall.

    
defuz 01.10.2012 20:00
quelle
7

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.

    
Pierre GM 01.10.2012 20:20
quelle
5

Ich denke, READABILITY ist wichtiger als Performance-Vorteil, wenn überhaupt, obwohl ich denke, dass es keine Unterschiede gibt.

Also benutze den 1. Weg, weil es einfacher zu verstehen ist.

    
charlee 01.10.2012 19:59
quelle
2

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.

    
Ry︁ 01.10.2012 19:58
quelle
2

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 :

%Vor%

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.)

    
GreenMatt 01.10.2012 20:33
quelle
0

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.

    
ajon 01.10.2012 19:59
quelle
0

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

    
piotrek 20.10.2012 23:42
quelle