2009-09-22 25 views
21

Tôi đã nhìn vào mã nguồn để các hasattr built-in chức năng và nhận thấy một vài dòng mà khơi gợi sự quan tâm của tôi:Tại sao Python giữ một số tham chiếu trên False và True?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

Không phải Py_FalsePy_True giá trị toàn cầu? Chỉ cần ra khỏi tò mò tuyệt đối, tại sao Python giữ một số tham chiếu cho các biến này?

+0

-1: Cách này giải quyết bất kỳ vấn đề lập trình nào bạn hiện có? –

+9

@ S.Lott vì khi có câu hỏi ở đây phải liên quan đến các vấn đề cụ thể về lập trình cụ thể. – Triptych

+17

Tôi hiện đang gặp vấn đề mà tôi không hiểu sự cần thiết phải tăng số lượng tham chiếu trên Py_True và Py_False. –

Trả lời

21

Nó là để làm cho tất cả các đối tượng xử lý thống nhất. Nếu tôi đang viết mã C xử lý một giá trị trả về từ một hàm, tôi phải tăng và giảm số lượng tham chiếu trên đối tượng đó. Nếu hàm trả về True, tôi không muốn kiểm tra xem đó có phải là một trong những đối tượng đặc biệt đó để biết có nên thao tác số tham chiếu của nó hay không. Tôi có thể đối xử với tất cả các đối tượng giống nhau.

Bằng cách xử lý True và False (và None, btw) giống như tất cả các đối tượng khác, mã C đơn giản hơn nhiều trong suốt.

+0

Ngoài ra: T F và None là các đối tượng thực sự. Họ không có bất kỳ phương pháp nào. http://docs.python.org/c-api/bool.html – Pod

+1

về mặt kỹ thuật, chúng có phương pháp. Mọi đối tượng đều có phương thức. – ironfroggy

+4

len (dir (Đúng)) là 54 - chock * đầy đủ * của các phương thức. Họ chỉ là tất cả những cái đặc biệt (đôi-dưới tên). –

Các vấn đề liên quan