파이썬의 `truthy`와 `falsy`
이 글은 파이썬의 truthy
와 falsy
를 설명합니다.
YouTube Video
파이썬의 truthy
와 falsy
truthy
와 falsy
의 정의
파이썬에서는 조건식에서 평가된 객체가 True
또는 False
로 간주됩니다. Truthy
는 True
로 평가되는 객체를 나타내며, Falsy
는 False
로 평가되는 객체를 나타냅니다. 이러한 평가는 주로 if
문이나 while
루프와 같은 조건 분기에서 사용됩니다. 또한, bool()
함수는 어떤 객체든 받아서 그 불리언 값을 반환합니다.
Falsy
(False로 평가되는 객체)
파이썬에서는 다음과 같은 객체들이 falsy
로 간주됩니다:.
-
False
-
None
-
숫자 0 값
- 예:
0
,0.0
- 예:
-
빈 시퀀스 타입 (예: 빈 리스트, 튜플 또는 스트링)
- 예:
[]
,()
,""
- 예:
-
빈 딕셔너리
- 예:
{}
- 예:
-
빈 집합
- 예:
set()
- 예:
이 객체들은 if
문 조건에서 'falsy'로 평가됩니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.
1if not []:
2 print("The list is falsy.")
- 이 코드에서 리스트
[]
는 비어 있으므로falsy
로 평가되고,print
문이 실행됩니다.
Truthy
(True로 평가되는 객체)
falsy
로 간주되지 않는 객체들은 truthy
로 간주됩니다.
-
0이 아닌 숫자 (정수, 부동 소수점 숫자)
- 예:
1
,3.14
,-100
- 예:
-
비어 있지 않은 시퀀스 타입 (리스트, 튜플, 문자열 등)
- 예:
[1, 2, 3]
,(1, 2)
,"Hello"
- 예:
-
비어 있지 않은 딕셔너리
- 예:
{"key": "value"}
- 예:
-
비어 있지 않은 집합(Set 유형)
- 예:
{1, 2, 3}
- 예:
truthy
로 간주되는 객체는 if
문의 조건에서 'True'로 평가됩니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.
1if [1, 2, 3]:
2 print("The list is truthy.")
- 위 코드에서 리스트
[1, 2, 3]
이 비어 있지 않으므로,truthy
로 평가되어print
문이 실행됩니다.
bool()
함수로 불리언 값 평가하기
bool()
함수를 사용하여 객체의 불리언 값을 평가할 수 있습니다.
1# Examples of falsy values
2print("False is", "truthy" if bool(False) else "falsy")
3print("0 is", "truthy" if bool(0) else "falsy")
4print('"" is', "truthy" if bool("") else "falsy")
5print("None is", "truthy" if bool(None) else "falsy")
6print("[] is", "truthy" if bool([]) else "falsy")
7
8# Examples of truthy values
9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
- 이 코드는 다양한 값의 진릿값이 어떻게 평가되는지 보여줍니다. 예를 들어, 숫자 값
0
과 빈 문자열은False
로 간주되는 반면, 공백이나 문자열"0"
은True
로 간주됩니다.
truthy
와 falsy
활용하기
truthy
와 falsy
를 활용함으로써, 코드를 더 간결하고 직관적으로 작성할 수 있습니다. 특히, if
문은 명시적인 비교 없이도 자주 평가될 수 있어 더 간략하게 만들 수 있습니다. 예를 들어, 다음 두 코드는 비슷하게 동작하지만 첫 번째 코드가 더 간결합니다.
1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5 print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9 print("The list is not empty.")
위의 예에서는 my_list
가 빈 리스트가 아닌 한 truthy
로 평가되며, 이를 통해 명시적인 비교가 필요 없다는 것을 알 수 있습니다.
truthy
와 falsy
를 활용한 설계
truthy
와 falsy
의 개념을 효과적으로 활용하면 코드 가독성과 효율성을 향상시킬 수 있습니다. 이는 특히 기본값을 설정하거나 변수 유효성을 확인하거나 입력값을 검증하는 데 유용합니다. 예를 들어, None
또는 빈 리스트가 인수로 전달될 것으로 예상하는 경우, 다음과 같이 코드를 작성할 수 있습니다.
1def process_data(data=None):
2 data = data or []
3 print(data)
4
5process_data() # An empty list is used by default.
- 이 코드에서
data
가None
이면, 빈 리스트[]
가 기본값으로 설정됩니다. 이와 같이truthy
와falsy
를 사용하면 기본값을 간결하게 설정할 수 있습니다.
의도치 않은 동작을 방지하기 위한 주의사항
하지만 truthy
와 falsy
값을 사용하는 코드는 간결하고 편리할 수 있지만, 의도치 않은 동작이 발생할 수 있음을 주의해야 합니다. 예를 들어, 이 코드에서는 data
가 None
일 때뿐 아니라, 빈 문자열이나 0
과 같이 **False
**로 평가되는 값일 때에도 기본값인 빈 리스트 []
로 대체됩니다. 이와 같은 이유로 값이 None
일 때만 초기화하는 등 더 엄격한 조건이 필요한 경우, value is None:
과 같은 명시적인 조건을 사용하는 것이 좋습니다. 상황에 따라 간결함과 엄격함의 균형을 염두에 두고 설계하는 것이 중요합니다.
1def process_data(data=None):
2 if data is None:
3 data = []
4 print(data)
5
6process_data() # An empty list is used by default.
7process_data(0) # 0 is printed because it's not None.
- 이 코드에서는
data
가None
일 때만 빈 리스트로 초기화되며,0
과 같은 다른 거짓값은 그대로 유지됩니다.
사용자 정의 객체의 불리언 값 제어하기
사용자 정의 클래스에서도 __bool__()
또는 __len__()
을 정의하여 인스턴스의 불리언 값을 제어할 수 있습니다.
1class MyContainer:
2 def __init__(self, items):
3 self.items = items
4
5 def __len__(self):
6 return len(self.items)
7
8box = MyContainer([])
9print(bool(box)) # False
10
11box.items.append("item")
12print(bool(box)) # True
- 이 코드에서는,
__len__()
메서드로 인해 컨테이너가 비어 있으면False
, 요소가 있으면True
로 평가됩니다.
결론
Python의 truthy
와 falsy
개념은 간결한 조건문을 작성하고 코드를 더 직관적으로 만드는 데 매우 중요합니다. 이를 이해하고 적절히 사용하면 코드의 가독성과 효율성을 크게 향상시킬 수 있습니다.
위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.