왜 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":
if name in {"Kevin", "Jon", "Inbar"}:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!