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

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

Susan Sarandon
Susan Sarandon원래의
2024-12-21 04:16:14583검색

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

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