首頁 >後端開發 >Python教學 >為什麼 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:14462瀏覽

Why Does `name ==

為什麼使用 Or 來賦值總是求值為 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"}:
  • 利用any()和產生器表達式:
用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

為了可讀性和為了提高效率,通常首選使用集合:

解析行為證明

BoolOp(
    op=Or(),
    values=[
        Compare(left=Name(...), ops=[Eq()], comparators=[Name(...)]),
        Name(...),
        Name(...),
        Name(...)])

內建的ast 模組確認像 a == b 或 c 這樣的表達式or d 被解析為:

表示「or」應用於各個比較,表達式。

以上是為什麼 Python 中的 `name == 'Kevin' or 'Jon' or 'Inbar'` 總是評估為 True?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn