Apakah ada manfaat untuk menggunakan salah satu dari yang lain? Di Python 2, mereka berdua tampaknya kembali hasil yang sama:
>>> 6/3
2
>>> 6//3
2
Di Python 3.0, 5 / 2
akan kembali 2.5
dan 5 // 2
akan kembali 2
. Mantan adalah floating point division, dan yang terakhir adalah lantai divisi, kadang-kadang juga disebut pembagian integer.
Di Python 2.2 atau yang lebih baru 2.x-line, tidak ada perbedaan untuk bilangan bulat kecuali jika anda melakukan dari __masa__ impor divisi
, yang menyebabkan Python 2.x untuk mengadopsi perilaku 3.0
Terlepas dari masa depan impor, 5.0 // 2
akan kembali 2.0
karena itu's lantai pembagian hasil dari operasi.
Anda dapat menemukan penjelasan rinci di https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
Hal ini membantu untuk memperjelas untuk Python versi 2.x line, /
bukan lantai divisi atau benar division. Saat ini jawaban yang diterima tidak jelas ini. /
adalah lantai division ketika kedua args adalah int, tapi benar division ketika salah satu atau kedua args yang mengapung.
Di atas menceritakan lebih banyak kebenaran, dan banyak lagi yang lebih jelas dari ayat 2 dalam jawaban yang diterima.
//
menerapkan "lantai divisi", terlepas dari jenis anda. Jadi
1.0/2.0
akan memberikan 0.5
, tapi kedua1/2
, 1//2
dan 1.0//2.0
akan memberikan 0
.
Lihat https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator untuk rincian
/ --> Floating point division
// --> Lantai divisi
Mari kita lihat beberapa contoh di kedua python 2.7 dan di Python 3.5.
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
Sekarang jika anda ingin memiliki (dalam python 2.7) output yang sama seperti di python 3.5, anda dapat melakukan hal-hal berikut:
Python 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 #Python 2.7
print (4/2) ----> 2.0 #Python 2.7
Di mana karena tidak ada differece antara Lantai di divisi kedua python 2.7 dan di 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
Seperti semua orang sudah menjawab, //
adalah lantai division.
Mengapa hal ini penting adalah bahwa //
adalah jelas lantai division, di semua Python versi 2.2, termasuk Python 3.x versi.
Perilaku /
dapat berubah tergantung pada:
__masa__
impor atau tidak (modul-lokal)-Q tua
atau -Q baru
Python 2.7 dan versi yang akan datang dari python:
/
)Membagi tangan kiri operan dengan tangan kanan operan
Contoh: 4 / 2 = 2
//
)Pembagian operan di mana hasilnya adalah hasil di mana digit setelah titik desimal akan dihapus. Tapi jika salah satu operand adalah negatif, hasilnya berlantai, yaitu, bulat yang dimulai dari nol (negatif terhadap infinity):
Contoh: 9//2 = 4
dan9.0//2.0 = 4.0
, -11//3 = -4
, -11.0//3 = -4.0
Kedua /
Divisi dan //
floor operator divisi beroperasi dalam cara yang sama.
Dalam jawaban ini saya tidak akan hanya memberitahu jawabannya, tetapi juga manfaat dari //.
Sebagian besar dari anda, yang menggunakan Python harus mengetahui tentang lantai pembagian operator(//) di Python. Bagi mereka yang don't tahu, operator ini mengembalikan nilai floor setelah divisi. Misalnya : 5 / 2 = 2.5, tapi 5 // 2 = 2 (2 lantai nilai 2.5)
Namun pembagian operator berperilaku abnormal umumnya untuk angka yang lebih besar dari 10 ^ 17.
x = 10000000000000000000006
if x / 2 == x // 2:
print("Hello")
else:
print("World")
Untuk kode di atas, Dunia akan dicetak dan tidak Halo. Hal ini karena 10000000000000000000006 / 2 akan kembali 5e + 21, tapi 10000000000000000000006 // 2 akan kembali jawaban yang benar 5000000000000000000003. Bahkan int(10000000000000000000006 / 2) akan kembali 5000000000000000000000, yang adalah tidak benar.
Oleh karena itu, bahkan jika anda ingin membagi jumlah besar, menggunakan // operator.
Misalnya : Jika anda ingin mencari jumlah dari pertama 100000000000000000000000010002 angka, dengan rumus : n(n + 1)/2, pembagian normal operator(/) akan memberikan jawaban yang salah, tapi // operator akan memberikan anda jawaban yang benar.
Atas jawaban yang baik. Saya ingin menambahkan titik lain. Hingga untuk beberapa nilai-nilai baik dari mereka hasil yang sama quotient. Setelah itu lantai pembagian operator (//
) bekerja dengan baik tetapi tidak division (/
) operator.
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
//
adalah lantai divisi, itu akan selalu memberikan nilai floor dari hasilnya./
adalah floating-point division.Berikut ini adalah perbedaan antara /
dan //
;
Saya telah menjalankan operasi aritmatika dalam Python 3.7.2
``
print (11 / 3) 3.6666666666666665
print (11 // 3) Tiga
print (11.3 / 3) 3.7666666666666667
print (11.3 // 3) 3.0 ``
5.0//2
hasil 2.0
, dan bukan 2
karena kembali jenis kembali nilai dari //
operator berikut python paksaan (type casting) aturan.
Python mempromosikan konversi yang lebih rendah datatype (integer) untuk data yang lebih tinggi tipe (float) untuk menghindari kehilangan data.