> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 `a == x or y or z`가 항상 True로 평가되는 이유는 무엇입니까?

Python에서 `a == x or y or z`가 항상 True로 평가되는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-31 04:35:17
원래의
748명이 탐색했습니다.

Why Does `a == x or y or z` Always Evaluate to True in Python?

"a == x 또는 y 또는 z" 오류

변수를 여러 값과 비교하려고 할 때 다음을 사용하고 싶은 유혹이 듭니다. 다음과 같은 Python의 논리 연산자:

if a == x or y or z:  # Incorrect
로그인 후 복사

그러나 이 표현식은 항상 True로 평가됩니다. a의 값에 관계없이. 이는 이 컨텍스트에서 "or" 연산자가 예상대로 작동하지 않기 때문입니다.

"or" 연산자 작동 방식

Python의 "or" 연산자(|) 피연산자 중 하나라도 True이면 True로 평가됩니다. 따라서 위 표현식에서 x, y 또는 z 중 하나는 항상 True이므로(비어 있지 않은 값은 Python에서 True) 표현식은 a 값에 관계없이 True로 평가됩니다.

여러 값을 비교하는 올바른 방법

변수를 여러 값과 올바르게 비교하려면 몇 가지 방법이 있습니다. 옵션:

  • 명시적인 "or" 연산자:

명시적인 "or" 연산자를 사용하여 각 값을 개별적으로 비교합니다:

if a == x or a == y or a == z:  # Correct
로그인 후 복사
  • 세트 또는 목록:

유효한 값의 집합 또는 목록을 만들고 "in" 연산자를 사용하여 멤버십을 확인합니다.

if a in {"Kevin", "Jon", "Inbar"}:  # Correct
로그인 후 복사
  • 생성기 표현식 및 "any()":

다음과 함께 생성기 표현식을 사용합니다. 각 값을 명시적으로 확인하려면 "any()"를 사용하세요.

if any(a == auth for auth in ["Kevin", "Jon", "Inbar"]):  # Correct
로그인 후 복사

성능 고려

성능을 위해 일반적으로 "in" 연산자와 함께 집합이나 목록을 사용하는 것이 좋습니다. 가장 빠른 옵션. "any()"를 사용하는 생성기 표현식은 가장 장황하고 가장 느립니다.

사용 예

승인된 사용자에게만 액세스 권한을 부여하려면:

authorized_names = {"Kevin", "Jon", "Inbar"}
name = input("Please enter your name: ")
if name in authorized_names:
    print("Access granted.")
else:
    print("Access denied.")
로그인 후 복사

위 내용은 Python에서 `a == x or y or z`가 항상 True로 평가되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿