Wie oft läuft len ​​()?

8

Wie oft wird len (p) laufen? Nur eins und das Ergebnis wird gespeichert, oder wird es für jede Iteration ausgeführt?

%Vor%     
Tyranron 02.02.2013, 13:38
quelle

4 Antworten

10

len() auf einem Slice wird vom Compiler optimiert, es ist so, als würde man auf eine lokale Variable zugreifen. Es ist nicht wirklich ein Funktionsaufruf.

Sie können bestätigen mit:

%Vor%

Und dann schauen Sie sich die Compiler-Ausgabe an:

$ go tool 6g -S x.go

%Vor%

Beachten Sie den Aufruf von fmt.Println , aber keinen Aufruf von len .

    
Brad Fitzpatrick 02.02.2013, 16:32
quelle
9

Probieren Sie ein Experiment! Ссылка

Oder lesen Sie die Dokumentation: Ссылка (TL; DR: "Die Bedingung wird vor jeder Iteration ausgewertet.")

In Ihrem Beispiel ist len ​​Teil der Bedingung, daher wird es vor jeder Iteration ausgewertet. Es wird eine Iteration geben für die sechs Male, die die Bedingung als wahr ausgewertet wird, dann eine weitere Auswertung, bei der sie als falsch ausgewertet wird und die for-Schleife endet. Also, insgesamt sieben Mal.

    
Sonia 02.02.2013 14:09
quelle
2

Ein zweites Experiment:

%Vor%

Ausgabe:

%Vor%

Es gibt einen Grund dafür, die Aufrufe von len () nicht zu optimieren.

    
Ekkehard.Horner 02.02.2013 14:45
quelle
-4

Aus algorithmischer Sicht wird die Bedingung für jeden Schritt der Schleife für ausgewertet. In diesem Fall scheint es das Sechsfache der Bewertung der len (p) zu sein.

    
user1929959 02.02.2013 13:44
quelle

Tags und Links