it-swarm.com.de

Was ist der Unterschied zwischen '/' und '//', wenn für die Division verwendet

Gibt es einen Vorteil, wenn man einen über den anderen verwendet? In Python 2 scheinen beide die gleichen Ergebnisse zu liefern:

>>> 6/3
2
>>> 6//3
2
356
Ray Vega

In Python 3.0 gibt 5 / 22.5 und 5 // 22 zurück. Ersteres ist Fließkommadivision und letzteres Bodenteilung, manchmal auch Ganzzahldivision genannt.

In Python 2.2 oder höher in der 2.x-Zeile besteht für Ganzzahlen kein Unterschied, es sei denn, Sie führen einen from __future__ import division aus, wodurch Python 2.x das Verhalten von 3.0 übernimmt

Unabhängig vom zukünftigen Import wird 5.0 // 22.0 zurückgegeben, da dies das Ergebnis der Bodenteilung der Operation ist.

Eine detaillierte Beschreibung finden Sie unter https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator

496
Eli Courtwright

Es ist hilfreich für die Python-2.x-Zeile zu klären, dass / weder eine Aufteilung noch eine Unterteilung ist. Die derzeit akzeptierte Antwort ist nicht klar. / ist Floor Division, wenn beide Bereiche int sind, aber echte Division, wenn einer oder beide der Argumente Float sind.

Das obige sagt viel mehr Wahrheit aus und ist viel klarer als der zweite Absatz der akzeptierten Antwort.

58
Yichun

// implementiert unabhängig von Ihrem Typ "Floor Division". Also 1.0/2.0 wird 0.5 geben, aber sowohl 1/2, 1//2 als auch 1.0//2.0 geben 0.

Unter https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator finden Sie weitere Einzelheiten

29
Kena

/-> Fließkommadivision

// -> Bodenteilung

Schauen wir uns einige Beispiele in Python 2.7 und Python 3.5 an.

Python 2.7.10 vs. Python 3.5  

print (2/3)  ----> 0                   Python 2.7
print (2/3)  ----> 0.6666666666666666  Python 3.5

Python 2.7.10 vs. Python 3.5  

  print (4/2)  ----> 2         Python 2.7
  print (4/2)  ----> 2.0       Python 3.5

Wenn Sie (in Python 2.7) dieselbe Ausgabe wie in Python 3.5 haben möchten, können Sie Folgendes tun: 

Python 2.7.10  

from __future__ import division
print (2/3)  ----> 0.6666666666666666   #Python 2.7
print (4/2)  ----> 2.0                  #Python 2.7

Es gibt keinen Unterschied zwischen Floor-Division in Python 2.7 und Python 3.5

138.93//3 ---> 46.0        #Python 2.7
138.93//3 ---> 46.0        #Python 3.5
4//3      ---> 1           #Python 2.7
4//3      ---> 1           #Python 3.5
25
N Randhawa

Wie jeder bereits geantwortet hat, ist // die Bodenabteilung.

Warum dies so wichtig ist, ist, dass // in allen Python-Versionen von 2.2, einschließlich Python 3.x-Versionen, eine eindeutige Bodendivision ist.

Das Verhalten von / kann sich ändern abhängig von:

  • Aktiver __future__-Import oder nicht (modullokal)
  • Python-Befehlszeilenoption, entweder -Q old oder -Q new
20
u0b34a0f6ae
>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0

**

  1. Python 2.7 und andere kommende Version von Python:

** /Division Teilt den linken Operanden durch den rechten Operanden Ex :: 4/2 = 2

Floor Division (//) - Die Division von Operanden, bei denen das Ergebnis der Quotient ist, in dem die Nachkommastellen entfernt werden. Wenn jedoch einer der Operanden negativ ist, wird das Ergebnis mit Nullen (gegen negative Unendlichkeit) abgerundet: Beispiele: 9 // 2 = 4 und 9.0 // 2.0 = 4.0, -11 // 3 = -4, -11,0 // 3 = -4,0

Beide/Division und // Floor Division Operator arbeiten auf ähnliche Weise

6
Abrar Ahmad

Der doppelte Schrägstrich, //, ist die Bodenteilung:

>>> 7//3
2
4
Mark Roddy

In dieser Antwort erkläre ich nicht nur die Antwort, sondern auch die Vorteile von //.

Die meisten von Ihnen, die Python verwenden, müssen den Floor Division Operator (//) in Python kennen. Für diejenigen, die es nicht wissen, gibt dieser Operator den Floor-Wert nach der Division zurück. Zum Beispiel: 5/2 = 2,5, aber 5 // 2 = 2 (2 ist der Floor-Wert von 2,5)

Der Divisionsoperator verhält sich jedoch normalerweise abnormal für Zahlen größer als 10 ^ 17.

x = 10000000000000000000006
if x / 2 == x // 2:
    print("Hello")
else:
    print("World")

Für den obigen Code wird World und nicht Hello gedruckt. Dies liegt daran, dass 100000000000000000006/2 5e + 21 zurückgibt, 10000000000000000000006 // 2 jedoch die korrekte Antwort 5000000000000000000003 zurückgibt.

Verwenden Sie daher auch dann den Operator //, wenn Sie große Zahlen teilen möchten.

Beispiel: Wenn Sie die Summe der ersten 10000000000000000000000000010002-Zahlen mit der Formel n (n + 1)/2 ermitteln möchten, gibt der normale Divisionsoperator (/) eine falsche Antwort, der Operator // hingegen eine korrekte Antwort.

3
Kushal Ghosh

// ist Floor Division, es wird immer der ganzzahlige Floor des Ergebnisses angegeben. Die andere ist eine "reguläre" Abteilung.

3
Adam Bellaire

Die Antwort der Gleichung wird auf die nächstkleinere Ganzzahl oder einen Float mit dem Dezimalpunkt 0 gerundet. 

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0
3
G.Ant

5.0//2 führt zu 2.0 und nicht zu 2, da der Rückgabetyp des Rückgabewerts des //-Operators Python-Zwangsregeln (Typumwandlung) folgt.

Python fördert die Konvertierung eines niedrigeren Datentyps (Ganzzahl) in einen höheren Datentyp (Float), um Datenverlust zu vermeiden.

0

Die obigen Antworten sind gut. Ich möchte einen weiteren Punkt hinzufügen. Bis zu einigen Werten ergeben beide den gleichen Quotienten. Danach funktioniert der Unterteilungsoperator (//) einwandfrei, der Unterteilungsoperator (/) jedoch nicht mehr.

 - > int(755349677599789174/2)
 - > 377674838799894592      #wrong answer
 - > 755349677599789174 //2
 - > 377674838799894587      #correct answer
0
jaya ram

Folgendes ist der Unterschied zwischen '/' und '//'; Ich habe diese arithmetischen Operationen in Python 3.7.2 ausgeführt

>>> print 11 / 3
3.6666666666666665

>>> print 11 // 3
3

>>> print 11.3 / 3
3.7666666666666667

>>> print 11.3 // 3
3.0
0