[python] False == 0 및 True == 1은 구현 세부 정보입니까, 아니면 언어에 의해 보장됩니까?

False == 0그리고 True == 1파이썬에서 (사용자가 다시 할당하지 않았다고 가정) 보장 됩니까? 예를 들어, 다음 코드가 Python 버전 (기존 및 향후 버전 모두)에 관계없이 항상 동일한 결과를 생성한다고 보장합니까?

0 == False  # True
1 == True   # True
['zero', 'one'][False]  # is 'zero'

공식 문서에 대한 언급은 대단히 감사하겠습니다!

편집 : 많은 답변에서 언급했듯이에서 bool상속 int합니다. “문서가 공식적 프로그래머, 정수에서 상속 논리 값에 의존 수 있다고합니까 : 질문 그러므로로 개주 수 의 값으로 0하고1 ?”. 이 질문은 구현 세부 사항으로 인해 실패하지 않는 강력한 코드 작성과 관련이 있습니다!



답변

Python 2.x에서는 이것이 가능 하고 재 할당 될 수 있으므로 보장 되지 않습니다 . 그러나이 경우에도 비교를 위해 부울 True 및 부울 False가 올바르게 리턴됩니다.TrueFalse

Python 3.x에서 TrueFalse키워드이며 항상 1and 0입니다.

Python 2의 일반적인 상황에서 항상 Python 3의 경우 :

Falseobject의 유형 bool은 다음과 같은 하위 클래스입니다 int.

object
   |
 int
   |
 bool

귀하의 예에서 ['zero', 'one'][False]작동 하는 유일한 이유 입니다. 목록 인덱싱은 정수 또는 __index__메소드 를 정의하는 객체 ( mark-dickinson ) 에서만 작동하기 때문에 정수의 서브 클래스가 아닌 객체에서는 작동하지 않습니다 .

편집하다:

현재 파이썬 버전과 파이썬 3도 마찬가지입니다. 파이썬 2.6 문서와 파이썬 3 문서는 다음 과 같이 말합니다.

정수에는 두 가지 유형이 있습니다. […] 정수 (int) […] 부울 (bool)

부울 하위 섹션에서 :

부울 :이 값은 진리 값 False 및 True […]를 나타냅니다. 부울 값은 거의 모든 컨텍스트에서 각각 값 0과 1처럼 동작합니다. 예외는 문자열로 변환 할 때 문자열 “False”또는 “True입니다. “가 각각 반환됩니다.

도 있습니다 파이썬 2 :

숫자 컨텍스트 (예 : 산술 연산자의 인수로 사용되는 경우)에서 [False 및 True]는 각각 정수 0과 1처럼 동작합니다.

따라서 부울은 Python 2.6 및 3에서 명시 적으로 정수로 간주됩니다.

따라서 Python 4가 나올 때까지 안전합니다. 😉


답변

: 파이썬 2.3의 새로운 부울 유형 논의 PEP 링크 http://www.python.org/dev/peps/pep-0285/을 .

부울을 정수로 변환 할 때 정수 값은 항상 0 또는 1이지만 정수를 부울로 변환 할 때 부울 값은 0을 제외한 모든 정수에 대해 True입니다.

>>> int(False)
0
>>> int(True)
1
>>> bool(5)
True
>>> bool(-5)
True
>>> bool(0)
False


답변

Python 2.x에서는 전혀 보장되지 않습니다.

>>> False = 5
>>> 0 == False
False

따라서 변경 될 수 있습니다. Python 3.x에서 True, False 및 None은 예약어입니다. 이므로 위의 코드는 작동하지 않습니다.

일반적으로 부울을 사용하면 False는 항상 0의 정수 값을 가지지 만 (위와 같이 변경하지 않는 한) True는 다른 값을 가질 수 있다고 가정해야합니다. 필자는 반드시 보장 True==1하지는 않지만 Python 3.x에서는 이것이 무엇이든 항상 그렇습니다.


답변

매우 간단합니다. bool은 정수를 bool로 평가하는 것과 관련이 있으므로 0 만 오답입니다. 음수가 아닌 모든 제로 이외의 값, 부동 소수점, 정수 또는 무엇을 가지고 있는지는 true를 반환합니다.

이것이 유용한 이유의 좋은 예는 장치의 전원 상태를 결정하는 것입니다. On은 0이 아닌 값이고 off는 0입니다. 전자적으로 말하면 이것이 의미가 있습니다.

값 사이에서 상대적으로 참 또는 거짓을 결정하려면 비교할 무언가가 있어야합니다. 이는 ==또는 !=또는 <,을 사용하여 문자열 및 숫자 값에 적용됩니다 > >=.<=

변수에 정수를 할당 한 다음 해당 변수 값에 따라 true 또는 false를 얻을 수 있습니다.


답변

그냥 쓰기 int(False)당신은 얻을 것이다 0당신이 입력하면, int(True)출력 것을1


답변

거짓은 바보입니다. 유형이 다릅니다. 정수인 0과 다른 오브젝트입니다.

0 == FalseFalse가 정수로 캐스트되므로 True를 리턴합니다. int (False)는 0을 반환합니다

== 연산자의 파이썬 문서는 (help ( ‘==’))라고 말합니다.

연산자는 <, >, ==, >=, <=, 및 !=두 개체의 값을 비교합니다. 객체의 유형이 같을 필요는 없습니다. 둘 다 숫자 인 경우 공통 유형으로 변환됩니다.

결과적으로 False는 비교가 필요한 정수로 변환됩니다. 그러나 0과 다릅니다.

>>> 0 is False
False


답변