Q & A

파이썬에서 0False, 0이 아닌 값은 True로 취급되는 이유는 무엇인가요?

CPU의 명령어가 그렇게 만들어져 있기 때문입니다. 예를 들면 인텔 CPU 명령어 중에서 jz(jump zero)와 jnz(jump not zero)가 있는데 각각 0일 때 점프, 0이 아닐 때 점프 동작을 하게 됩니다. 파이썬은 컴퓨터의 CPU에서 실행되므로 CPU 명령어의 특성을 그대로 따릅니다.

NoneFalse는 같은가요?

NoneFalse로 취급되긴 하지만 NoneFalse는 같지 않습니다. None은 아무것도 없다는 뜻이며 False는 거짓을 나타냅니다. 다음과 같이 NoneFalse가 같은지 확인해보면 False가 나오므로 둘은 서로 다릅니다.

>>> None == False
False
>>> None is False
False

if 조건문만 사용할 때와 elif를 사용할 때의 차이점은 무엇인가요?

다음과 같이 if 조건문만 사용하면 모든 if 조건문의 조건식을 검사한 뒤 코드를 실행합니다.

a, b, c = 10, 20, 30
 
if a == 10:        # 조건식이 참
    print('10')    # 출력
if b == 20:        # 조건식이 참
    print('20')    # 출력
if c == 30:        # 조건식이 참
    print('30')    # 출력

실행 결과

10
20
30

if 조건문의 조건식이 모두 만족하므로 10, 20, 30이 출력됩니다. 만약 두 번째, 세 번째 ifelif라면 실행 결과가 달라집니다.

a, b, c = 10, 20, 30
 
if a == 10:        # 조건식이 참
    print('10')    # 출력
elif b == 20:      # 조건식을 검사하지 않고 건너뜀
    print('20')
elif c == 30:      # 조건식을 검사하지 않고 건너뜀
    print('30')

실행 결과

10

if 조건문 뒤에 elif가 연결되어 있을 때는 첫 번째 if의 조건식이 만족하면 뒤에 오는 elif의 조건식은 검사하지 않고 그냥 건너뜁니다. 예제에서는 실제로 세 조건식이 모두 만족하지만 처음에 오는 if의 코드만 실행하고, 나머지 조건식은 검사하지 않고 건너뛰었으므로 10만 출력됩니다.

만약, 첫 번째 if의 조건식이 만족하지 않았다면 두 번째 elif의 코드만 실행하고, 세 번째 elif는 건너뜁니다. 즉, 가장 처음 만족하는 if 또는 elif의 코드만 실행합니다.

a, b, c = 5, 20, 30
 
if a == 10:        # 조건식이 거짓
    print('10')
elif b == 20:      # 조건식이 참
    print('20')    # 출력
elif c == 30:      # 조건식을 검사하지 않고 건너뜀
    print('30')

실행 결과

20

if, elif는 여러 코드 중에서 하나만 실행할 때 사용합니다.