[python] Truthy와 Falsy는 무엇입니까? 참 및 거짓과 어떻게 다릅니 까?

나는 파이썬에 정상 과 다른 TruthyFalsy 값 이 있다는 것을 알게되었습니다 .TrueFalse

누군가가 진실거짓 가치가 무엇인지 깊이 설명해 주 시겠습니까?

어디에서 사용해야합니까?

진실True가치, 거짓False가치 의 차이점은 무엇입니까 ?



답변

설명에서 설명했듯이 True 또는 False로 평가되는 값을 나타냅니다.

예를 들어 다음과 같이 확인하는 대신 목록이 비어 있지 않은지 확인합니다.

if len(my_list) != 0:
   print("Not empty!")

간단하게 다음과 같이 할 수 있습니다.

if my_list:
   print("Not empty!")

빈 목록과 같은 일부 값은 부울 값으로 평가 될 때 False로 간주되기 때문입니다. 비어 있지 않은 목록은 True입니다.

마찬가지로 정수 0의 경우 빈 문자열 “”등, False의 경우, 0이 아닌 정수, 비어 있지 않은 문자열 등의 경우 True입니다.

“진정한”및 “거짓”과 같은 용어의 개념은 단순히 위에서 설명한 것과 같은 경우에 참으로 간주되는 값과 거짓으로 간주되는 값을 나타냅니다.

예를 들어, 빈 목록 ( [])은 “허위”로 간주되고 비어 있지 않은 목록 (예 [1]:)은 “진정한”것으로 간주됩니다.

문서의이 섹션을 참조하십시오 .


답변

“허위”인 다음을 제외하고 모든 값은 “진정한”것으로 간주됩니다.

  • None
  • False
  • 0
  • 0.0
  • 0j
  • Decimal(0)
  • Fraction(0, 1)
  • [] -빈 list
  • {} -빈 dict
  • () -빈 tuple
  • '' -빈 str
  • b'' -빈 bytes
  • set() -빈 set
  • 비어있는 range 처럼,range(0)
  • 대상
    • obj.__bool__() 보고 False
    • obj.__len__() 보고 0

“truthy”값은 if또는 while문에 의해 수행 된 검사를 충족합니다 . 우리는 차별화에 “truthy”와 “falsy을”사용 bool가치 TrueFalse.

진실 가치 테스트


답변

참 값은 true 또는 false를 반환하는 부울 값이 아니라 부울 컨텍스트에서 사용되는 개체를 참조합니다.

>>> bool([])
False
>>> bool([1])
True
>>> bool('')
False
>>> bool('hello')
True


답변

파이썬은 적용하여 진실성을 결정합니다. bool() 복귀 형으로 True또는 False같은 표현식에서 사용 if하거나while .

다음은 사용자 정의 클래스 Vector2d의 예이며 인스턴스가False 이며 크기 (벡터의 길이)가 0 일 때 되는 이고 그렇지 않으면 True.

import math
class Vector2d(object):
    def __init__(self, x, y):
        self.x = float(x)
        self.y = float(y)

    def __abs__(self):
        return math.hypot(self.x, self.y)

    def __bool__(self):
        return bool(abs(self))

a = Vector2d(0,0)
print(bool(a))        #False
b = Vector2d(10,0)
print(bool(b))        #True

참고 : 정의하지 않았을 경우__bool__ 사용자 정의 클래스의 인스턴스는 기본적으로 진실로 간주되므로 항상 True를 반환합니다.

책의 예 : “Fluent in Python, 명확하고 간결하며 효과적인 프로그래밍”


답변

Truthy 또는 Falsy 값은 어디에 사용해야합니까? 이것들은 통사론 적 설탕입니다 이므로 언제든지 피할 수 있지만 코드를 사용하면 코드를 더 읽기 쉽고 효율적으로 만들 수 있습니다. 또한, 파이썬이든 아니든 많은 코드 예제에서 찾을 수 있습니다. 좋은 방법으로 간주되기 때문입니다.

다른 답변에서 언급했듯이 if 테스트 및 while 루프에서 사용할 수 있습니다. 여기서 결합 기본값 파이썬 3 개의 다른 예 or, s문자열 변수 인이. 유사한 상황으로도 확장 할 수 있습니다.

진실없이

if len(s) > 0:
    print(s)
else:
    print('Default value')

진실로 더 간결합니다.

print(s or 'Default value')

파이썬 3.8에서는 할당 표현식을 활용할 수 있습니다. :=

진실없이

if len(s) == 0:
    s = 'Default value'
do_something(s)

진실로 그것은 너무 짧습니다

s or (s := 'Default value')
do_something(s)

또는 더 짧게,

do_something(s or (s := 'Default value'))

할당 식 없이는 할 수 있습니다

s = s or 'Default value'
do_something(s)

그러나 짧지는 않습니다. 어떤 사람들은 s =...라인이 만족스럽지 않다고 생각합니다.

if len(s)>0:
    s = s # HERE is an extra useless assignment
else:
    s = "Default value"

그럼에도 불구하고이 코딩 스타일에 익숙하다면 고수 할 수 있습니다.


답변

while 0:
    print("Inside the loop.", counter)
    counter -= 1
print("Outside the loop.", counter)

이 루프를 실행하면 while 0 : = while false :

0은 허위로 간주됩니다.


답변

Falsy는 빈 값 또는 None을 갖는 모든 데이터 유형으로서 빈 목록, 튜플과 같이 비어있는 것을 의미합니다. 진실한 의미 : 예외는 진실