Bölme için kullanıldığında '/' ve '//' arasındaki fark nedir?


Yanıtlar:


650

Python 3.x ' 5 / 2de dönecek 2.5ve 5 // 2dönecektir 2. Birincisi kayan nokta bölümüdür ve ikincisi bazen de tamsayı bölümü olarak da adlandırılan taban bölümüdür .

Python 2.2 veya sonraki sürümlerde 2.x satırında, bir işlem yapmazsanız tamsayılar için bir fark yoktur from __future__ import division, bu da Python 2.x'in 3.x davranışını benimsemesine neden olur.

Gelecekteki ithalattan bağımsız olarak , operasyonun taban bölümü sonucu olduğu için 5.0 // 2geri dönecektir 2.0.

Detaylı bir açıklama https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator adresinde bulabilirsiniz.


editör: Python 2.2'den beri bölünmeyi "düzeltebilirsiniz"! (Sadece bağlantılı
PEP'i

2
Ayrıca python -Qnew. diğer bölme seçenekleri: -Qold(varsayılan) -Qwarn,,-Qwarnall
John La Rooy

2
Olduğu gibi tüm sürümlerde 5.0 / 2geri döndüğünü belirtmeye değer - eski davranış sadece her iki işlenen de farklıdır . 2.55 / 2.0int
Chris

2
Sayılar negatif olduğunda ne olur? Negatif tamsayılar için davranış aynı mı?
Aaron Franke

1
@Srinivasu Örneğiniz yararlı değil. Daha iyi 5 // 2 (2 verir) ve -5 // 2 (-3 verir) olurdu.
Marvin

67

Python 2.x Açıklama:

Python 2.x hattına açıklık getirmek için /ne zemin bölümü ne de gerçek bölümüdür. Kabul edilen mevcut cevap bu konuda net değil.

/zaman taban bölümüdür iki bağımsız değişken olarak int, ama gerçek bölümüdür ya da her iki args vardır float.

Yukarıdakiler daha fazla gerçeği anlatır ve kabul edilen cevaptaki 2. paragraftan daha açıktır.


33

//türünüzden bağımsız olarak "kat bölümü" uygular. Yani 1.0/2.0verecektir 0.5, ancak her iki 1/2, 1//2ve 1.0//2.0verecektir 0.

Ayrıntılar için bkz. Https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator


Bu iyi bir cevap. PEP bağlantısı yardımcı olur. Ayrıca, tekli operatörlerle neler olup bittiğinden emin değilseniz math.floor()ya da kullanmayı düşünün math.fmod().
Scott Lowrey

/ve //bienal operatörler (iki işlenen, sol ve sağ, pay ve payda)
iono

28

/ -> Kayan nokta bölümü

// -> Kat bölümü

Hem python 2.7'de hem de Python 3.5'te bazı örnekleri görelim.

Python 2.7.10 ve Python 3.5 Karşılaştırması

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

Python 2.7.10 ve Python 3.5 Karşılaştırması

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

Şimdi (python 2.7'de) python 3.5 ile aynı çıktıya sahip olmak istiyorsanız, aşağıdakileri yapabilirsiniz:

Python 2.7.10

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

Hem python 2.7 hem de Python 3.5'te Kat bölümü arasında fark olmadığı için

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

int (5/2) ile aynı mı?
2018'de PirateApp

Sayılar negatif olduğunda ne olur? Negatif tamsayılar için davranış aynı mı?
Aaron Franke

1
Re: Olumsuz - Davranış nedenle her zaman olduğu yuvarlama, aynı, ama sonuç zemin olduğunu unutmayın aşağı doğru daha negatif . Bazı örnekler: -100 // 33=> -4 ; 100 // -33=> -4 ; ancak zemin fonkunun yuvarlanma yönü nedeniyle, bir sonrakine göre bir önceki sezgisel görünebilir: -100 // -33=> 3 .
Erdős-Bacon

22

Herkesin cevapladığı gibi //, kat bölümüdür.

Bunun neden önemli olduğu, //Python 3.x sürümleri de dahil olmak üzere 2.2'nin tüm Python sürümlerinde açıkça kat bölümü olmasıdır.

Davranışı /aşağıdakilere bağlı olarak değişebilir:

  • Etkin __future__içe aktarma veya alma (modül yerel)
  • Python komut satırı seçeneği, -Q oldveya-Q new

10
>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0

1
Kat bölümünün tamsayı olmayanlarla da çalıştığını fark etmemişti. Teşekkürler!
Mike

5

Python 2.7 ve diğer python sürümleri:

  • Bölüm ( /)

Sol taraftaki işleneni sağ taraftaki işlenene böler

Misal: 4 / 2 = 2

  • Kat Bölümü ( //)

Sonucun, ondalık noktadan sonraki basamakların kaldırıldığı bölüm olduğu işlenenlerin bölümü. Ancak işlenenlerden biri negatifse, sonuç katlanır, yani sıfırdan uzağa (negatif sonsuza doğru) yuvarlanır:

Örnekler: 9//2 = 4ve 9.0//2.0 = 4.0, -11//3 = -4,-11.0//3 = -4.0

Hem /Bölme hem de //kat bölme operatörü benzer şekilde çalışmaktadır.


2
Sonsuzluğa doğru ve sıfırdan uzakta farklı şeyler vardır. (-1.2 ve 3.4) için örnek: "döşeme" negatif sonsuza (-2 ve 3), "kesme" sıfıra (-1 ve 3), "doyma" sıfırdan (-2 ve 4) uzağa, ve "tavan" pozitif sonsuza (-1 ve 4) yöneliktir.
Phernost


3

//kat bölümüdür, her zaman sonucun tam sayı katını verecektir. Diğeri 'düzenli' bölümdür.


2

Denklemin cevabı bir sonraki küçük tamsayıya yuvarlanır veya ondalık nokta olarak .0 ile kayar.

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0

2

Yukarıdaki cevaplar iyidir. Başka bir nokta daha eklemek istiyorum. Bazı değerlere kadar her ikisi de aynı bölümle sonuçlanır. Bundan sonra kat bölme operatörü ( //) iyi çalışır ancak bölme ( /) operatörü çalışmaz .

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

-1

5.0//2ile sonuçlanır 2.0, ve 2, çünkü geri dönüş tipi dönüş değeri //operatör piton zorlama (tip döküm) kuralları takip eder.

Python, veri kaybını önlemek için daha düşük veri türünün (tamsayı) daha yüksek veri türüne (kayan nokta) dönüştürülmesini destekler.


-1
  • // kat bölümüdür, her zaman sonucun kat değerini verecektir.
  • Diğeri /de kayan nokta bölümü.

Aşağıdakilerden arasındaki fark olan /ve //; Bu aritmetik işlemleri Python 3.7.2'de çalıştırdım

>>> print (11 / 3)
3.6666666666666665

>>> print (11 // 3)
3

>>> print (11.3 / 3)
3.7666666666666667

>>> print (11.3 // 3)
3.0

2
Bu cevap diğer fikirlerin kapsamadığı bir şeyi nasıl ekliyor? Ya da bu cevap diğer cevaplardan nasıl daha iyi?
Rory Daulton

2
Aşağıdaki program çıktısıdır. Hiçbir şeyi açıklamıyor.
Lorne Marquis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.