มีประโยชน์ในการใช้อย่างใดอย่างหนึ่งมากกว่าที่อื่น ๆ ? ใน Python 2 พวกเขาทั้งคู่ดูเหมือนจะให้ผลลัพธ์ที่เหมือนกัน:
>>> 6/3
2
>>> 6//3
2
มีประโยชน์ในการใช้อย่างใดอย่างหนึ่งมากกว่าที่อื่น ๆ ? ใน Python 2 พวกเขาทั้งคู่ดูเหมือนจะให้ผลลัพธ์ที่เหมือนกัน:
>>> 6/3
2
>>> 6//3
2
คำตอบ:
ในหลาม 3.x, 5 / 2
จะกลับมา2.5
และจะกลับมา5 // 2
2
อดีตลอยส่วนจุดและหลังเป็นส่วนชั้นบางครั้งเรียกว่าจำนวนเต็มส่วน
ใน Python 2.2 หรือใหม่กว่าในบรรทัด 2.x ไม่มีความแตกต่างสำหรับจำนวนเต็มเว้นแต่ว่าคุณจะทำ a from __future__ import division
ซึ่งทำให้ Python 2.x ใช้พฤติกรรม 3.x
ไม่คำนึงถึงการนำเข้าในอนาคต5.0 // 2
จะกลับมา2.0
เนื่องจากเป็นผลการแบ่งชั้นของการดำเนินการ
คุณสามารถดูคำอธิบายโดยละเอียดได้ที่https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
python -Qnew
ด้วย ตัวเลือกส่วนอื่น ๆ : -Qold
(ค่าเริ่มต้น) -Qwarn
,-Qwarnall
5.0 / 2
ผลตอบแทน2.5
ในทุกรุ่นเช่นเดียวกับ5 / 2.0
- int
พฤติกรรมเก่าที่แตกต่างกันเฉพาะเมื่อทั้งสองตัวถูกดำเนินการอยู่
เพื่อชี้แจงสำหรับสาย Python 2.x /
ไม่ใช่การแบ่งพื้นหรือการหารที่แท้จริง คำตอบที่ยอมรับในปัจจุบันไม่ชัดเจนในเรื่องนี้
/
เป็นส่วนชั้นเมื่อทั้ง args มีint
แต่เป็นส่วนจริงเมื่อหนึ่งหรือทั้งสองของ args float
เป็น
ข้างต้นบอกความจริงมากกว่าและชัดเจนกว่าวรรค 2 ในคำตอบที่ยอมรับ
//
ใช้ "การแบ่งชั้น" โดยไม่คำนึงถึงประเภทของคุณ ดังนั้น
1.0/2.0
จะให้0.5
แต่ทั้งสอง1/2
, 1//2
และจะให้1.0//2.0
0
ดูhttps://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operatorสำหรับรายละเอียด
math.floor()
หรือmath.fmod()
ถ้าคุณไม่แน่ใจว่าเกิดอะไรขึ้นกับตัวดำเนินการเอก
/
และ//
เป็นตัวดำเนินการแบบสองชั้น (สองตัวถูกดำเนินการ, ซ้ายและขวา, ตัวเศษและส่วน)
/ -> การแบ่งจุดลอยตัว
// -> การแบ่งชั้น
ให้ดูตัวอย่างทั้งใน python 2.7 และ Python 3.5
Python 2.7.10 กับ Python 3.5
print (2/3) ----> 0 Python 2.7
print (2/3) ----> 0.6666666666666666 Python 3.5
Python 2.7.10 กับ Python 3.5
print (4/2) ----> 2 Python 2.7
print (4/2) ----> 2.0 Python 3.5
ตอนนี้ถ้าคุณต้องการมีเอาต์พุต (ใน python 2.7) เหมือนกับใน python 3.5 คุณสามารถทำสิ่งต่อไปนี้:
Python 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 #Python 2.7
print (4/2) ----> 2.0 #Python 2.7
โดยที่ไม่มีความแตกต่างระหว่างการแบ่งชั้นในทั้งงูใหญ่ 2.7 และงูหลาม 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
-100 // 33
=> -4 ; 100 // -33
=> -4 ; แต่เนื่องจากทิศทางการปัดเศษของ func ชั้นหนึ่งต่อไปอาจดูเหมือนเคาน์เตอร์เมื่อเทียบกับก่อนหน้านี้: -100 // -33
=> 3
ตามที่ทุกคนตอบไปแล้วการ//
แบ่งชั้นคือ
เหตุใดสิ่งนี้จึงมีความสำคัญนั่น//
คือการแบ่งชั้นอย่างไม่น่าสงสัยในเวอร์ชัน Python ทั้งหมดจาก 2.2 รวมถึงเวอร์ชัน Python 3.x
พฤติกรรมของ/
สามารถเปลี่ยนแปลงได้ขึ้นอยู่กับ:
__future__
นำเข้าที่ใช้งานอยู่หรือไม่ (โมดูลท้องถิ่น)-Q old
หรือ-Q new
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
Python 2.7 และ python เวอร์ชั่นอื่นที่กำลังจะมาถึง:
/
)แบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวา
ตัวอย่าง: 4 / 2 = 2
//
)การหารของโอเปอแรนด์ที่ผลลัพธ์เป็นผลหารของตัวเลขหลังจากลบจุดทศนิยม แต่ถ้าตัวถูกดำเนินการตัวใดตัวหนึ่งเป็นลบผลลัพธ์จะถูกปูพื้นเช่นถูกปัดเศษจากศูนย์ (ไปทางอนันต์ลบ):
ตัวอย่าง: 9//2 = 4
และ9.0//2.0 = 4.0
, -11//3 = -4
,-11.0//3 = -4.0
ทั้งสอง/
ฝ่ายและ//
ผู้ประกอบการส่วนชั้นที่มีการดำเนินงานในรูปแบบเหมือนกัน
เครื่องหมายทับสอง//
อันคือส่วนแบ่ง:
>>> 7//3
2
//
คือการแบ่งชั้นมันจะให้จำนวนเต็มกับผลลัพธ์เสมอ อีกส่วนหนึ่งคือ 'ปกติ'
คำตอบของสมการนี้จะถูกปัดเศษให้เป็นจำนวนเต็มหรือทศนิยมที่น้อยกว่าถัดไปโดยมีทศนิยมเป็น 0
>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0
คำตอบข้างต้นเป็นสิ่งที่ดี ฉันต้องการเพิ่มจุดอื่น ค่าบางค่าทั้งสองค่าจะมีค่าความฉลาดเท่ากัน หลังจากนั้นตัวดำเนินการหารพื้น ( //
) นั้นทำงานได้ดี แต่ไม่ใช่/
ตัวดำเนินการหาร ( )
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
5.0//2
ส่งผล2.0
ให้และไม่ใช่2
เพราะประเภทการส่งคืนของค่าส่งคืนจาก//
ผู้ประกอบการเป็นไปตามกฎการบังคับใช้แบบหลาม (การหล่อแบบ)
Python ส่งเสริมการแปลงประเภทข้อมูลที่ต่ำกว่า (จำนวนเต็ม) เป็นประเภทข้อมูลที่สูงขึ้น (ลอย) เพื่อหลีกเลี่ยงการสูญเสียข้อมูล
//
คือการแบ่งชั้นมันจะให้ค่าของผลลัพธ์กับพื้นเสมอ/
คือการหารจุดลอยตัวความแตกต่างระหว่าง/
และ//
; ฉันใช้การคำนวณทางคณิตศาสตร์เหล่านี้ใน Python 3.7.2
>>> print (11 / 3)
3.6666666666666665
>>> print (11 // 3)
3
>>> print (11.3 / 3)
3.7666666666666667
>>> print (11.3 // 3)
3.0
//
ผู้ปฏิบัติงานให้ทำหารจำนวนเต็ม