> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 `name == 'Kevin' or 'Jon' or 'Inbar'`가 항상 True로 평가되는 이유는 무엇입니까?

Python에서 `name == 'Kevin' or 'Jon' or 'Inbar'`가 항상 True로 평가되는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-21 04:16:14
원래의
460명이 탐색했습니다.

Why Does `name ==

왜 Or Always를 사용하여 할당하면 True로 평가되나요?

논리 연산자를 사용하여 여러 값을 비교할 때 Python의 동작은 우리가 직관적으로 이해하는 것과 다를 수 있습니다. . 예를 들어 코드에서는

name = input("Hello. Please enter your name: ")
if name == "Kevin" or "Jon" or "Inbar":
    print("Access granted.")
else:
    print("Access denied.")
로그인 후 복사

Python이 이 표현식을 다음과 같이 평가하기 때문에 권한이 없는 사용자에게도 액세스가 허용됩니다.

if (name == "Kevin") or ("Jon") or ("Inbar"):
로그인 후 복사

이 경우 결과는 모든 이름에 대해 True입니다. "Jon"과 "Inbar"는 독립적인 논리 피연산자로 처리되기 때문입니다.

값을 다중 값과 ​​비교하는 방법 기타

여러 값과 정확하게 비교하려면:

  • 여러 == 연산자 사용:
if name == "Kevin" or name == "Jon" or name == "Inbar":
로그인 후 복사
  • A를 고용하세요 컬렉션:
if name in {"Kevin", "Jon", "Inbar"}:
로그인 후 복사
  • any() 및 생성기 표현식 활용:
if any(name == auth for auth in ["Kevin", "Jon", "Inbar"]):
로그인 후 복사

성능 비교

가독성을 위해 효율성을 높이려면 일반적으로 컬렉션을 사용하는 것이 좋습니다.

import timeit
timeit.timeit('name in {"Kevin", "Jon", "Inbar"}', setup="name='Inbar'")  # Faster
timeit.timeit('any(name == auth for auth in ["Kevin", "Jon", "Inbar"])',
             setup="name='Inbar'")  # Slower
로그인 후 복사

파싱 동작 증명

내장된 ast 모듈은 a == b 또는 c 또는 d는 다음과 같이 구문 분석됩니다.

BoolOp(
    op=Or(),
    values=[
        Compare(left=Name(...), ops=[Eq()], comparators=[Name(...)]),
        Name(...),
        Name(...),
        Name(...)])
로그인 후 복사

개별 비교에 "또는"이 적용됨을 나타냅니다. 그리고 표현.

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

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