2013-01-23 32 views
18

Sử dụng phổ biến cho chức năng coerce được tích hợp sẵn của Python là gì? Tôi có thể thấy áp dụng nó nếu tôi không biết type của một giá trị số as per the documentation, nhưng các tập quán phổ biến khác có tồn tại không? Tôi đoán rằng coerce() cũng được gọi khi thực hiện tính toán số học, ví dụ:x = 1.0 +2. Đó là một chức năng tích hợp, vì vậy có lẽ nó có một số cách sử dụng phổ biến tiềm năng?Coerce của Python() được sử dụng để làm gì?

+6

Chưa bao giờ nghe nói về 'ép buộc() '(+1) – NPE

+2

Không dùng nữa, không được sử dụng trên Python 2.6 hoặc 3 – imreal

+11

Nếu bạn đọc các lưu ý ở phía trên cùng của phần các tài liệu liên quan đến bạn, bạn shouldn' t sử dụng nó, và cũng không nên bạn cần biết nó tồn tại. – geoffspear

Trả lời

13

Số còn lại của nó từ early python, về cơ bản, nó tạo thành một bộ số là cùng một loại số cơ bản, ví dụ:

>>> type(10) 
<type 'int'> 
>>> type(10.0101010) 
<type 'float'> 
>>> nums = coerce(10, 10.001010) 
>>> type(nums[0]) 
<type 'float'> 
>>> type(nums[1]) 
<type 'float'> 

Nó cũng cho phép các đối tượng đóng vai trò như số với các lớp học cũ
(một tấm gương xấu của việc sử dụng của nó ở đây sẽ là ...)

>>> class bad: 
...  """ Dont do this, even if coerce was a good idea this simply 
...   makes itself int ignoring type of other ! """ 
...  def __init__(self, s): 
...    self.s = s 
...  def __coerce__(self, other): 
...    return (other, int(self.s)) 
... 
>>> coerce(10, bad("102")) 
(102, 10) 
2

Python lõi lập trình nói: "Chức năng coerce() cung cấp cho lập trình viên không dựa vào trình thông dịch Python, nhưng tùy chỉnh hai kiểu chuyển đổi dạng số. "

ví dụ:

>>> coerce(1, 2) 
(1, 2) 
>>> 
>>> coerce(1.3, 134L) 
(1.3, 134.0) 
>>> 
>>> coerce(1, 134L) 
(1L, 134L) 
>>> 
>>> coerce(1j, 134L) 
(1j, (134+0j)) 
>>> 
>>> coerce(1.23-41j, 134L) 
((1.23-41j), (134+0j))