Was ist der Unterschied zwischen '/' und '//', wenn Sie für die division?
Ist es ein Vorteil einen über den anderen? In Python 2, Sie beide scheinen dieselben Ergebnisse zurückgegeben:
>>> 6/3
2
>>> 6//3
2
- Bitte Das Problem mit Integer-Division der Grund für die Einführung der
//
Betreiber zu tun integer-division.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Python 3.0,
5 /2
zurück2.5
und5 //2
zurück2
. Der ehemalige Fließkomma-division, und die letztere ist eine Boden-Abteilung, manchmal auch als integer-division.In Python 2.2 oder später in der 2.x line, es ist kein Unterschied für Ganzzahlen, es sei denn, Sie führen eine
from __future__ import division
, die bewirkt, dass Python 2.x zu erlassen, die das Verhalten von 3.0Unabhängig von der Zukunft importieren,
5.0 //2
zurück2.0
da das der Boden Teilung Ergebnis der operation.Finden Sie eine detaillierte Beschreibung bei https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
python -Qnew
. andere Einteilung Optionen:-Qold
(Standard)-Qwarn
,-Qwarnall
5.0 / 2
zurück2.5
in allen Versionen, wie5 / 2.0
- das alte Verhalten ist nur dann anders, wenn beide Operandenint
.Hilft es zu klären, für die Python-2.x line,
/
weder Boden-division noch wahr division. Die aktuelle akzeptierte Antwort ist nicht eindeutig./
ist der Boden der division, wenn beide Argumente sind int, aber ist wahr division, wenn entweder oder beide der Argumente sind im float.Den oben sagt viel mehr Wahrheit, und ist viel klarer als der 2. Absatz in der akzeptierten Antwort.
//
implementiert "Boden-division", unabhängig von Ihrem Typ. So1.0/2.0
geben0.5
, aber beide1/2
,1//2
und1.0//2.0
geben0
.Sehen https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator für details
math.floor()
odermath.fmod()
wenn Sie nicht sicher sind, was mit den unären Operatoren ./
und//
sind binäre Operatoren (zwei Operanden, Links und rechts, Zähler und Nenner)/ --> Floating point division
// --> Stock division
Können einige Beispiele sehen Sie in den beiden python 2.7 und Python 3.5.
2.7.10 Python vs Python 3.5
2.7.10 Python vs Python 3.5
Nun, wenn Sie wollen (in python 2.7) dieselbe Ausgabe wie in python 3.5, können Sie Folgendes tun:
2.7.10 Python
Wo, da es keine differece zwischen Boden-division in beiden python 2.7 und Python 3.5
-100 // 33
=> -4;100 // -33
=> -4; aber wegen der Rundung Richtung Boden func, der nächste könnte scheinen counter-intuitive, im Vergleich zu früheren:-100 // -33
=> 3.Als alle bereits beantwortet hat,
//
ist eine Boden-division.Warum dies wichtig ist ist, dass
//
ist eindeutig Stock division, in der alle Python-Versionen ab 2.2, inklusive Python 3.x-Versionen.Das Verhalten von
/
ändern kann, je nach:__future__
import oder nicht (Modul-lokale)-Q old
oder-Q new
Python 2.7 und anderen kommenden version von python:
/
)Teilt linken Operanden durch den rechten Operanden
Beispiel:
4 /2 = 2
//
)Der division der Operanden das Ergebnis ist der quotient, in denen die Ziffern nach dem Dezimalpunkt werden entfernt. Aber wenn einer der Operanden negativ ist, das Ergebnis ist Platt, d.h., gerundet Weg von der null (in Richtung negativ unendlich):
Beispiele:
9//2 = 4
und9.0//2.0 = 4.0
,-11//3 = -4
,-11.0//3 = -4.0
Beide
/
Division und//
Stock division operator tätig sind, in ähnlicher Weise.Dem doppelten Schrägstrich,
//
, ist eine Boden-Teilung:In dieser Antwort werde ich nicht nur sagen, die Antwort, aber auch die Vorteile von //.
Meisten, die die Verwendung von Python wissen müssen, über die Fußboden-division-operator(//) in Python. Für diejenigen, die nicht wissen, dieser operator liefert die Boden-Wert nach der Teilung. Beispiel : 5 /2 = 2.5, aber 5 //2 = 2 (2 ist der Boden-Wert von 2,5)
Aber die division operator verhält sich ungewöhnlich, generell für zahlen größer als 10 ^ 17.
Den obigen code, Welt gedruckt wird und nicht Hallo. Dies ist, weil 10000000000000000000006 /2 zurück 5e + 21, aber 10000000000000000000006 //2 wird wieder die richtige Antwort 5000000000000000000003. Auch int(10000000000000000000006 /2) wieder die 5000000000000000000000, was falsch ist.
Deshalb, auch wenn Sie teilen möchten, und große zahlen, verwenden Sie die //- operator.
Beispiel : Wenn Sie möchten, zu finden, die Summe der ersten 100000000000000000000000010002 zahlen, mit der Formel : n(n + 1)/2, der normale divisionsoperator(/) geben Sie die falsche Antwort, aber //- operator wird Ihnen die richtige Antwort.
/
ist "verhält sich ungewöhnlich" hier - dies ist nur floating-point-Fehler./
in Python 3 gibt einen Schwimmer, auch beim dividieren von Ganzzahlen, und 5000000000000000000003 kann nicht genau dargestellt werden, wie eine float.//
ist eine Boden-division, es wird Sie immer geben Sie den integer-Boden das Ergebnis. Die anderen "normalen" Abteilung.Die Antwort der Gleichung ist, aufgerundet auf den nächst kleineren integer-oder float-.0 als Dezimaltrennzeichen.
Den oben genannten Antworten sind gut. Ich möchte hinzufügen, ein weiterer Punkt. Bis auf einige Werte die beiden von Ihnen führen die gleiche Quotienten. Nach diesen Boden divisionsoperator (
//
) funktioniert gut, aber nicht die division (/
) - operator.//
ist eine Boden-division, es wird Ihnen immer die Boden-Wert das Ergebnis./
ist die floating-point division.Folgenden werden die Differenz zwischen
/
und//
;Ich habe diese arithmetische Operationen in Python 3.7.2
5.0//2
Ergebnisse in2.0
, und nicht2
weil die Rückgabetyp der Rückgabewert von//
operator folgt python-Zwang (Typ-casting) Regeln.Python-fördert die Umwandlung von niedrigeren Datentyp (integer) zu höheren Datentyps (float), um Datenverlust zu vermeiden.