여러 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!