In Python 3.x 5 / 2wird zurückgegeben 2.5und 5 // 2wird zurückkehren 2. Ersteres ist Gleitkommadivision, und letzteres ist Bodenteilung , manchmal auch Ganzzahldivision genannt .
In Python 2.2 oder höher in der 2.x-Zeile gibt es keinen Unterschied für Ganzzahlen, es sei denn, Sie führen a aus from __future__ import division, wodurch Python 2.x das 3.x-Verhalten übernimmt.
Unabhängig vom zukünftigen Import 5.0 // 2wird zurückkehren, 2.0da dies das Ergebnis der Bodenteilung der Operation ist.
bearbeitet: Sie können die Teilung seit Python 2.2 "korrigieren"! (Lesen Sie einfach das verknüpfte PEP)
u0b34a0f6ae
2
auch python -Qnew. andere Abteilung Optionen: -Qold(Standard), -Qwarn,-Qwarnall
John La Rooy
2
Erwähnenswert, dass 5.0 / 2Renditen 2.5in allen Versionen, wie auch 5 / 2.0- das alte Verhalten ist nur anders , wenn beiden Operanden int.
Chris
2
Was ist, wenn die Zahlen negativ sind? Ist das Verhalten für negative ganze Zahlen dasselbe?
Aaron Franke
1
@Srinivasu Dein Beispiel ist nicht hilfreich. Besser wäre 5 // 2 (was 2 ergibt) und -5 // 2 (was -3 ergibt).
Marvin
67
Python 2.x Erläuterung:
Zur Verdeutlichung der Python 2.x-Linie /ist weder eine Bodenteilung noch eine echte Teilung erforderlich. Die aktuell akzeptierte Antwort ist dazu nicht klar.
/ist die Bodenteilung , wenn beide Argumente vorhanden sind int, ist jedoch die wahre Teilung, wenn eines oder beide Argumente vorhanden sind float.
Das Obige sagt mehr Wahrheit und ist klarer als der 2. Absatz in der akzeptierten Antwort.
Das ist eine gute Antwort. Der PEP-Link ist hilfreich. Erwägen Sie auch die Verwendung von math.floor()oder math.fmod()wenn Sie nicht sicher sind, was mit den unären Operatoren los ist.
Scott Lowrey
/und //sind zwei Operatoren (zwei Operanden, links und rechts, Zähler und Nenner)
iono
28
/ -> Gleitkommadivision
// -> Bodenteilung
Sehen wir uns einige Beispiele sowohl in Python 2.7 als auch in Python 3.5 an.
Was ist, wenn die Zahlen negativ sind? Ist das Verhalten für negative ganze Zahlen dasselbe?
Aaron Franke
1
Betreff: Negative - Das Verhalten ist das gleiche, aber denken Sie daran, dass das Ergebnis Boden ist, sodass die Rundung immer in Richtung negativer ist . Einige Beispiele: -100 // 33=> -4 ; 100 // -33=> -4 ; aber aufgrund der Rundungsrichtung der Bodenfunktion könnte die nächste im Vergleich zur vorherigen kontraintuitiv erscheinen: -100 // -33=> 3 .
Erdős-Bacon
22
Wie jeder schon geantwortet hat, //ist Bodenteilung.
Dies ist wichtig //, da es sich in allen Python-Versionen ab 2.2, einschließlich Python 3.x-Versionen , um eine eindeutige Unterteilung handelt.
Das Verhalten von /kann sich ändern in Abhängigkeit von:
Aktiver __future__Import oder nicht (modul-lokal)
Python-Befehlszeilenoption, entweder -Q oldoder-Q new
Hatte nicht bemerkt, dass die Bodenteilung auch mit Nicht-Ganzzahlen funktioniert. Vielen Dank!
Mike
5
Python 2.7 und andere kommende Versionen von Python:
Abteilung ( /)
Teilt den linken Operanden durch den rechten Operanden
Beispiel: 4 / 2 = 2
Floor Division ( //)
Die Division von Operanden, wobei das Ergebnis der Quotient ist, bei dem die Ziffern nach dem Dezimalpunkt entfernt werden. Wenn jedoch einer der Operanden negativ ist, ist das Ergebnis bodenständig, dh von Null weggerundet (in Richtung negative Unendlichkeit):
Gegen unendlich und weg von Null sind verschiedene Dinge. Beispiel für (-1,2 und 3,4): "Bodenbelag" ist gegen negative Unendlichkeit (-2 und 3), "Abschneiden" gegen Null (-1 und 3), "Sättigung" ist von Null entfernt (-2 und 4), und "Decke" ist gegen positive Unendlichkeit (-1 und 4).
Die obigen Antworten sind gut. Ich möchte noch einen Punkt hinzufügen. Bis zu einigen Werten ergeben beide den gleichen Quotienten. Danach //funktioniert der Floor Division Operator ( ) einwandfrei, der Division ( /) Operator jedoch nicht .
Wie fügt diese Antwort etwas hinzu, das die anderen Ideen nicht abdecken? Oder wie ist diese Antwort in irgendeiner Weise besser als die anderen Antworten?
Rory Daulton
2
Das Folgende ist die Ausgabe eines Programms. Es erklärt nichts.
//
Operators in die Ganzzahldivision finden Sie unter Das Problem mit der Ganzzahldivision .Antworten:
In Python 3.x
5 / 2
wird zurückgegeben2.5
und5 // 2
wird zurückkehren2
. Ersteres ist Gleitkommadivision, und letzteres ist Bodenteilung , manchmal auch Ganzzahldivision genannt .In Python 2.2 oder höher in der 2.x-Zeile gibt es keinen Unterschied für Ganzzahlen, es sei denn, Sie führen a aus
from __future__ import division
, wodurch Python 2.x das 3.x-Verhalten übernimmt.Unabhängig vom zukünftigen Import
5.0 // 2
wird zurückkehren,2.0
da dies das Ergebnis der Bodenteilung der Operation ist.Eine ausführliche Beschreibung finden Sie unter https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
quelle
python -Qnew
. andere Abteilung Optionen:-Qold
(Standard),-Qwarn
,-Qwarnall
5.0 / 2
Renditen2.5
in allen Versionen, wie auch5 / 2.0
- das alte Verhalten ist nur anders , wenn beiden Operandenint
.Python 2.x Erläuterung:
Zur Verdeutlichung der Python 2.x-Linie
/
ist weder eine Bodenteilung noch eine echte Teilung erforderlich. Die aktuell akzeptierte Antwort ist dazu nicht klar./
ist die Bodenteilung , wenn beide Argumente vorhanden sindint
, ist jedoch die wahre Teilung, wenn eines oder beide Argumente vorhanden sindfloat
.Das Obige sagt mehr Wahrheit und ist klarer als der 2. Absatz in der akzeptierten Antwort.
quelle
//
implementiert "Bodenteilung", unabhängig von Ihrem Typ. Also1.0/2.0
wird geben0.5
, aber beides1/2
,1//2
und1.0//2.0
wird geben0
.Weitere Informationen finden Sie unter https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
quelle
math.floor()
odermath.fmod()
wenn Sie nicht sicher sind, was mit den unären Operatoren los ist./
und//
sind zwei Operatoren (zwei Operanden, links und rechts, Zähler und Nenner)/ -> Gleitkommadivision
// -> Bodenteilung
Sehen wir uns einige Beispiele sowohl in Python 2.7 als auch in Python 3.5 an.
Python 2.7.10 vs. Python 3.5
Python 2.7.10 vs. Python 3.5
Wenn Sie nun (in Python 2.7) dieselbe Ausgabe wie in Python 3.5 haben möchten, können Sie Folgendes tun:
Python 2.7.10
Wobei es keinen Unterschied zwischen der Floor-Aufteilung in Python 2.7 und in Python 3.5 gibt
quelle
-100 // 33
=> -4 ;100 // -33
=> -4 ; aber aufgrund der Rundungsrichtung der Bodenfunktion könnte die nächste im Vergleich zur vorherigen kontraintuitiv erscheinen:-100 // -33
=> 3 .Wie jeder schon geantwortet hat,
//
ist Bodenteilung.Dies ist wichtig
//
, da es sich in allen Python-Versionen ab 2.2, einschließlich Python 3.x-Versionen , um eine eindeutige Unterteilung handelt.Das Verhalten von
/
kann sich ändern in Abhängigkeit von:__future__
Import oder nicht (modul-lokal)-Q old
oder-Q new
quelle
quelle
Python 2.7 und andere kommende Versionen von Python:
/
)Teilt den linken Operanden durch den rechten Operanden
Beispiel:
4 / 2 = 2
//
)Die Division von Operanden, wobei das Ergebnis der Quotient ist, bei dem die Ziffern nach dem Dezimalpunkt entfernt werden. Wenn jedoch einer der Operanden negativ ist, ist das Ergebnis bodenständig, dh von Null weggerundet (in Richtung negative Unendlichkeit):
Beispiele:
9//2 = 4
und9.0//2.0 = 4.0
,-11//3 = -4
,-11.0//3 = -4.0
Sowohl die
/
Division als auch der//
Betreiber der Floor Division arbeiten auf ähnliche Weise.quelle
Der doppelte Schrägstrich
//
ist die Bodenteilung:quelle
//
Wenn es sich um eine Bodenteilung handelt, erhalten Sie immer die ganzzahlige Etage des Ergebnisses. Die andere ist "reguläre" Teilung.quelle
Die Antwort der Gleichung wird auf die nächst kleinere Ganzzahl gerundet oder mit .0 als Dezimalpunkt aufgelegt.
quelle
Die obigen Antworten sind gut. Ich möchte noch einen Punkt hinzufügen. Bis zu einigen Werten ergeben beide den gleichen Quotienten. Danach
//
funktioniert der Floor Division Operator ( ) einwandfrei, der Division (/
) Operator jedoch nicht .quelle
5.0//2
Dies2.0
führt zu und nicht,2
weil der Rückgabetyp des Rückgabewerts vom//
Operator den Regeln für Python-Zwang (Typumwandlung) folgt.Python fördert die Konvertierung eines niedrigeren Datentyps (Ganzzahl) in einen höheren Datentyp (Float), um Datenverlust zu vermeiden.
quelle
//
Wenn es sich um eine Bodenteilung handelt, erhalten Sie immer den Bodenwert des Ergebnisses./
ist die Gleitkommadivision.Folgendes ist der Unterschied zwischen
/
und//
; Ich habe diese arithmetischen Operationen in Python 3.7.2 ausgeführtquelle