>백엔드 개발 >파이썬 튜토리얼 >Python의 여러 `or` 연산자가 예기치 않은 부울 결과를 생성하는 이유는 무엇입니까?

Python의 여러 `or` 연산자가 예기치 않은 부울 결과를 생성하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-31 03:44:091004검색

Why Do Multiple `or` Operators in Python Produce Unexpected Boolean Results?

여러 Or 연산자가 예기치 않은 결과를 생성하는 이유

Python에서 다중 or 연산자가 포함된 표현식을 평가하면 오해의 소지가 있을 수 있습니다. 예를 들어 다음 코드 줄을 고려해 보세요.

if name == "Kevin" or "Jon" or "Inbar":

이 줄은 승인되지 않은 사용자에게 액세스 권한을 부여하려고 하지만 실제로는 모든 사용자에게 허용됩니다. 그 이유를 이해하려면 연산자의 행동을 살펴볼 필요가 있습니다.

The Problem with Multiple Ors

영어에서 "or"는 여러 절을 연결하여 적어도 하나의 Or를 의미함을 나타냅니다. 사실이어야 합니다. 그러나 Python에서는 "A 또는 B 또는 C"와 같은 표현식은 "(A 또는 B) 또는 C"로 구문 분석됩니다. 즉, 첫 번째 표현식만 평가됩니다. true이면 전체 표현식이 true입니다.

해결책 1: 다중 등식 연산자

"이름"을 인증된 각 사용자와 올바르게 비교하려면 여러 개의 등식 연산자를 사용하십시오. :

if name == "Kevin" or name == "Jon" or name == "Inbar":

해결책 2: 설정 멤버십

대체 솔루션은 승인된 이름 집합을 사용하고 멤버십을 확인하는 것입니다.

authorized = {"Kevin", "Jon", "Inbar"}
if name in authorized:

솔루션 3: 모든 운영자

any() 함수를 사용하여 승인된 이름을 반복하고 일치하는 이름이 있으면 True를 반환할 수도 있습니다. "name":

authorized = ["Kevin", "Jon", "Inbar"]
if any(name == auth for auth in authorized):

성능

세 가지 솔루션 중에서 집합 멤버십이 가장 좋은 성능을 제공하고 그 다음으로 여러 동등 연산자가 제공됩니다. any()를 사용하는 것이 가장 효율적이지 않습니다.

위 내용은 Python의 여러 `or` 연산자가 예기치 않은 부울 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.