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 phía 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.
Python bản đồ khai thác như +
, -
, *
và /
các chức năng đặc biệt, như vậy ví dụ như a + b
là tương đương với
a.__add__(b)
Về phân chia bằng Python 2, có bằng cách chỉ mặc định /
mà bản đồ để __div__
và kết quả là phụ thuộc vào các loại đầu vào (ví dụ int
, float
).
Python 2.2 đã giới thiệu __future__
tính năng này division
, đã thay đổi ngữ nghĩa phân chia theo cách sau (TL; DR của PEP 238):
/
các bản đồ __truediv__
phải "trả về một xấp xỉ hợp lý của kết quả toán học của phép chia" (trích từ PEP 238)
//
bản đồ đến __floordiv__
, sẽ trả về kết quả nổi/
Với Python 3.0, các thay đổi của PEP 238 trở thành hành vi mặc định và không có phương thức nào đặc biệt hơn __div__
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, hãy sử dụng
from __future__ import division
và tuân theo ngữ nghĩa PEP 238 của /
và //
.