Câu trả lời được chấp nhận đã đề cập đến PEP 238. Tôi chỉ muốn thêm một cái nhìn nhanh chóng đằng sau hậu trường cho những người quan tâm đến những gì đang diễn ra mà không cần đọc toàn bộ PEP.
Các nhà khai thác bản đồ Python như
from __future__ import division
1, from __future__ import division
2, from __future__ import division
3 và from __future__ import division
4 cho các chức năng đặc biệt, như vậy, ví dụ: from __future__ import division
5 tương đương vớia.__add__[b]
Về sự phân chia trong Python 2, theo mặc định chỉ có
from __future__ import division
4 ánh xạ tới from __future__ import division
7 và kết quả phụ thuộc vào các loại đầu vào [ví dụ: from __future__ import division
8, from __future__ import division
9].Python 2.2 đã giới thiệu tính năng
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 30
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 31, đã thay đổi ngữ nghĩa phân chia theo cách sau [TL; DR của PEP 238]:
4 Bản đồ thànhfrom __future__ import division
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 3
3 phải "trả lại xấp xỉ hợp lý về kết quả toán học của bộ phận" [trích dẫn từ PEP 238]# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 3
4 Bản đồ thành# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 3
5, sẽ trả lại kết quả của
4from __future__ import division
Với Python 3.0, những thay đổi của PEP 238 đã trở thành hành vi mặc định và không có phương pháp đặc biệt nào nữa
from __future__ import division
7 trong mô hình đối tượng của Python.Nếu bạn muốn sử dụng cùng một mã trong Python 2 và Python 3
from __future__ import division
và dính vào ngữ nghĩa PEP 238 của
from __future__ import division
4 và # Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 34.
Trong bài đăng này, bạn sẽ học Python 3 Division, cũng như một số điều kỳ quặc bất ngờ của nó. Bạn sẽ học cách sử dụng cả phương pháp số nguyên và sàn, cũng như cách diễn giải một số kết quả ít được mong đợi của nó.
- Phân khu Python - Những cách khác nhau
- Phân chia sàn Python
- Phân chia phao Python
- Sự kết luận
Phân khu Python - Những cách khác nhau
Phân chia sàn Python
- Phân chia phao Pythonfloating point value.
- Sự kết luậnfloored integer or floating point value.
Python có hai toán tử phân chia khác nhau,
from __future__ import division
4 và # Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 34. Cái nào bạn sử dụng phụ thuộc vào kết quả mà bạn muốn đạt được.floor value.
Toán tử Slash
from __future__ import division
4 đơn lẻ được gọi là Phân chia Float, trả về giá trị điểm nổi.# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 3
Mặt khác, toán tử chém gấp đôi
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 34 trả về giá trị không có giá trị, cụ thể là một số nguyên hoặc giá trị điểm nổi.
>> -7.0 // 3 -3.0
Phân chia sàn Python, sử dụng toán tử
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 34, hoạt động bằng cách trả lại giá trị nổi của thương số của nó. Điều này hoạt động khác với phân chia số nguyên sẽ làm tròn số. Thay vào đó, điều này hoạt động bằng cách trả lại giá trị sàn.
Phân chia phao Python
Sự kết luận
# Two integers >> 7 / 3 2.33 # One floating point value >> 7.0 / 3 2.33 # Two floating point values >> 7.0 / 3.0 2.33
Python có hai toán tử phân chia khác nhau,
from __future__ import division
4 và # Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 34. Cái nào bạn sử dụng phụ thuộc vào kết quả mà bạn muốn đạt được.
Sự kết luận
Python có hai toán tử phân chia khác nhau,
from __future__ import division
4 và # Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 34. Cái nào bạn sử dụng phụ thuộc vào kết quả mà bạn muốn đạt được.
Toán tử Slash
from __future__ import division
4 đơn lẻ được gọi là Phân chia Float, trả về giá trị điểm nổi.Mặt khác, toán tử chém gấp đôi
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 34 trả về giá trị không có giá trị, cụ thể là một số nguyên hoặc giá trị điểm nổi.
- Phân chia sàn Python, sử dụng toán tử
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 3
4, hoạt động bằng cách trả lại giá trị nổi của thương số của nó. Điều này hoạt động khác với phân chia số nguyên sẽ làm tròn số. Thay vào đó, điều này hoạt động bằng cách trả lại giá trị sàn. - Hãy cùng xem cách thức hoạt động của nó trong hành động, bằng cách xem xét một vài ví dụ:
- Một lưu ý thú vị về điều này là những gì xảy ra với các số âm:
Trong Python, có hai loại phân chia: phân chia số nguyên và phân chia phao.
Phân chia số nguyên
Bộ phận số nguyên trả lại sàn của bộ phận. Đó là, các giá trị sau điểm thập phân bị loại bỏ. Nó được viết là '//' trong Python 3. Vì vậy, 1 // 3 = 0, 2 // 3 = 0 và 3 // 3 = 1. Các giá trị số nguyên được lưu trữ chính xác, vì vậy chúng an toàn để sử dụng trong so sánh.
Trong Python 2, toán tử '//' không được bao gồm, do đó, nó phải được nhập từ mô -đun
# Two float values >> 7.0 // 2.0 3.0 # A single float value >> 7 // 2.0 3.0 # Two integers >> 7 // 2 30. Xem mã bên dưới để biết cách sử dụng toán tử '//' trong Python 2. Toán tử '/' trong Python 2 trả về kết quả số nguyên nếu cả hai toán hạng là số nguyên.
Python 2
# Python 2 integer division using '//' from __future__ import division print 4//3 # prints 1
hoặc
# Python 2 integer division using '/' print 4/3 # prints 1
Python 3
# Python 3 integer division print[4//3] # prints 1
Xem __future__ để biết tài liệu của mô -đun.
Giải quyết vấn đề. Only a certain number of values after the decimal can be stored, so it is not possible to store an exact binary representation of many floating point numbers. This sometimes leads to problems when comparing numbers or when rounding.
Tại sao bộ phận của tôi không làm việc trong Python?
Python 2
from __future__ import division # floating point division using __future__ syntax print 4 / 3 # prints 1.33333333333
hoặc
# floating point division using a float to force float result # no need to import from __future__ print 4 / 3.0 # prints 1.33333333333
Python 3
from __future__ import division
0Xem __future__ để biết tài liệu của mô -đun.__future__ for documentation of the module.
Giải quyết vấn đề