為什麼使用 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"}:
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中文網其他相關文章!