HOWTO · Python

Python의 `if not` 구문

이 튜토리얼은 파이썬에서 if not 문을 사용하는 방법을 보여줍니다.

이 페이지의 내용

Python의 if not 구문은 not 뒤에 오는 표현식이 거짓일 때 블록을 실행합니다. 임계값에 도달하지 않았는지, 플래그가 거짓인지, 컬렉션에 항목이 없는지 확인하는 등 부정 조건을 명확히 표현할 때 사용합니다. 본문에는 일반 if 문과 같은 들여쓰기 규칙이 적용됩니다.

Python에서 if not의 의미

not은 불리언 연산자로, 뒤에 오는 표현식의 참·거짓 값을 반대로 바꿉니다. Python은 비교식을 not보다 먼저 평가하므로 if not x > 10:은 “x > 10이 거짓이면”이라는 뜻입니다. if not (x > 10):과 같은 의미입니다. 이는 if 자체에 일반적인 반대 연산이 있다는 뜻은 아닙니다. 특히 조건이 길 때 괄호를 사용하면 의도한 묶음을 더 쉽게 알아볼 수 있습니다.

다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

x = 5

if not x > 10:
    print("x is not greater than 10")

x = 5일 때 x > 10은 거짓이므로 not이 조건을 참으로 바꾸고 Python은 들여쓴 블록에 진입합니다. 이 예제는 x is not greater than 10을 출력하며, 이 문자열은 코드에 적힌 그대로 영어로 표시됩니다. x가 10보다 크다면 조건이 거짓이 되어 블록을 건너뜁니다.

비교식과 불리언 값에 if not 사용하기

앞의 예처럼 비교식을 직접 부정하거나 불리언 변수를 검사할 수 있습니다. 예를 들어 if not is_logged_in:은 is_logged_in이 False일 때 블록에 진입합니다. 불리언 값을 == False와 명시적으로 비교하는 것보다 이 방식이 더 명확한 경우가 많습니다. 조건이 자연스럽게 읽히도록 변수 이름에 그 의미를 담아 보세요.

비교식은 연산자를 바꿔 긍정형으로 표현할 수도 있습니다. 예를 들어 일반적인 숫자 값에서는 not (x == 10)과 x != 10이 같은 검사를 나타냅니다. 요구 사항을 가장 쉽게 읽을 수 있는 형태를 선택하세요. 부정되는 표현식과 다른 조건을 구별하는 데 도움이 된다면 괄호를 유지하세요.

컬렉션이 비어 있는지 확인하기

리스트, 튜플, 딕셔너리, 세트 같은 내장 컨테이너는 항목이 없을 때 조건식에서 거짓으로 평가됩니다. 따라서 if not items:는 빈 컬렉션을 처리하는 간결한 방법입니다. 컨테이너에 항목이 있으면 그중 하나 이상이 거짓 값이더라도 컨테이너 자체는 참으로 평가됩니다. 그 밖의 흔한 거짓 값에는 False, None, 숫자 0, 빈 문자열이 있습니다. 사용자 정의 객체는 자체 참·거짓 값을 정의할 수 있으므로 모든 객체가 컨테이너와 같은 방식으로 동작한다고 가정하지 마세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

items = []

if not items:
    print("The list is empty.")

이 검사를 사용하면 프로그램이 리스트를 처리하기 전에 빈 리스트를 위한 경로를 선택할 수 있습니다. 다만 이 검사만으로 이후의 인덱싱이 안전해지는 것은 아닙니다. 존재하지 않는 항목에 접근하지 않도록 코드에서도 확인해야 합니다. 예제는 The list is empty.를 출력하며, 이 문자열은 코드에 적힌 그대로 영어로 표시됩니다.

컬렉션에 항목이 없는지 확인하기

값이 없는지 검사할 때는 Python의 멤버십 연산자 not in를 사용하세요. 멤버십 검사 앞에 not을 쓰는 것보다 의도를 직접적으로 나타냅니다. 예를 들어 if 4 not in numbers:는 4가 numbers의 요소가 아닐 때만 블록을 실행합니다. if not (4 in numbers):처럼 묶어 쓰는 것도 유효하지만, 관용적인 표기는 not in입니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

numbers = [1, 2, 3]

if 4 not in numbers:
    print("4 is missing")

멤버십 검사는 리스트, 문자열, 세트, 딕셔너리 키를 확인할 때 유용합니다. 딕셔너리에서 item in mapping은 키를 검사하며 값 전체를 검색하지는 않습니다.

if not를 다른 조건과 결합하기

모든 조건이 참이어야 한다면 부정한 검사와 and를 결합하고, 하나 이상의 조건이 참이면 된다면 or를 결합하세요. Python은 not을 and와 or보다 먼저 평가합니다. 복잡한 논리는 괄호로 명확히 표현하세요. 필요한 상태를 기준으로 조건 전체를 읽어 보세요. and로 연결된 두 조건을 각각 부정하는 것과 결합된 표현식 전체를 부정하는 것은 서로 다릅니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

is_logged_in = False
is_admin = False

if not is_logged_in and not is_admin:
    print("Access denied. Please log in.")
else:
    print("Continue")

이 예제에서는 부정된 두 조건이 모두 참이므로 첫 번째 블록이 선택됩니다. 두 플래그 중 하나라도 참이면 결합된 and 조건은 거짓이 되어 else 블록이 실행됩니다. else 분기는 조건의 다른 결과를 처리할 뿐, not이 표현식을 평가하는 방식은 바꾸지 않습니다.