Es gibt einen signifikanten Unterschied in Leistung, wenn Sie verwenden größere Zahlen. Hier
ist ein Beispiel kleine und große Zahlen mit:
$ py27 -m timeit -s "a=123;b=7" "divmod(a,b)"
10000000 loops, best of 3: 0.0913 usec per loop
$ py27 -m timeit -s "a=123;b=7" "a//b;a%b"
10000000 loops, best of 3: 0.047 usec per loop
$ py27 -m timeit -s "a=123333333333333333333333333333333333333;b=7222222222222222222" "divmod(a,b)"
10000000 loops, best of 3: 0.165 usec per loop
$ py27 -m timeit -s "a=123333333333333333333333333333333333333;b=7222222222222222222" "a//b;a%b"
1000000 loops, best of 3: 0.232 usec per loop
Warum der Unterschied?
divmod() erfordert einen Funktionsaufruf, während // und% Operatoren sind. Es gibt einen zusätzlichen Overhead für einen Funktionsaufruf relativ zu Operatoren. Wenn also die Kosten der Berechnung minimal sind, ist der Overhead beim Aufruf einer Funktion viel größer als die tatsächlichen Kosten der Berechnung (en).
Für größere Zahlen ist divmod() schneller. divmod() berechnet sowohl den Quotienten als auch den Rest zur gleichen Zeit und gibt beide zurück. Die Operatoren // und% berechnen jeweils den Quotienten und den Rest, geben aber nur eines der Ergebnisse zurück.
divmod() hat mehr Overhead, führt aber nur eine Division durch. // und% haben weniger Overhead, aber zwei Divisionen. Solange der Overhead im Vergleich zur Zeit groß ist, um division durchzuführen, wird divmod() langsamer sein.Aber sobald die Kosten einer Division größer als der Overhead ist, wird Divmod() schneller sein.
Ich vermute, Sie nicht nach diesem Code sind aber gedacht, überprüfen: a = 10 b = 2 div = a // b mod = a% b –
@KatiaPunter Ich war für eine Art der Suche von integrierten funktionieren, weil diese manchmal viel schneller sind. Aber ich werde diese Lösung auch mal überprüfen und sehen, welche besser funktioniert. Danke – joaoavf
@joaoavf Woher hast du diese Zahlen? 'Nahm 2,56 Sekunden bis run' und' dauerte 3,99 Sekunden –