2009-09-22 2 views
21

난으로 hasattr 내장 함수에 소스 코드를 찾아 내 관심을 감정을 상하게 라인의 몇 가지 발견되었습니다파이썬은 왜 참조 카운트를 거짓 및 참으로 유지합니까?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

있습니까하지 Py_FalsePy_True 글로벌 값을? 호기심에 빠져있는 이유는 무엇입니까? 파이썬은 왜 이러한 변수에 대한 참조 카운트를 유지하고 있습니까?

+0

-1 : 현재 프로그래밍 문제를 어떻게 해결할 수 있습니까? –

+9

@ S.Lott 여기에서 질문 할 때는 특정 프로그래밍 문제와 관련이 있어야합니다. – Triptych

+17

현재 Py_True 및 Py_False에서 참조 카운트를 증가시킬 필요성을 이해하지 못한다는 문제점이 있습니다. –

답변

21

모든 물체 취급을 균일하게 만드는 것입니다. 함수에서 반환 값을 처리하는 C 코드를 작성하는 경우 해당 객체의 참조 횟수를 늘리거나 줄여야합니다. 이 함수가 True를 반환하면 참조 카운트를 조작할지 여부를 알 수있는 특수 오브젝트인지 여부를 확인하지 않아도됩니다. 모든 물체를 똑같이 다룰 수 있습니다.

다른 모든 개체와 마찬가지로 True 및 False (및 None, btw)를 처리하면 C 코드가 훨씬 간단 해집니다.

+0

또한 : T F 및 없음은 실제로 개체입니다. 그들은 단지 어떤 방법도 가지고 있지 않습니다. http://docs.python.org/c-api/bool.html – Pod

+1

에는 기술적 인 방법이 있습니다. 모든 객체에는 메서드가 있습니다. – ironfroggy

+4

len (dir (True))는 메소드의 54 * chock * full *입니다. 그것들은 모두 특별한 (이중 밑줄로 이름 지어진) 것들입니다. –