1. 程式人生 > >python中的and與or

python中的and與or

一、問題起源:

main=None

main=main or sys.modules["__main__"].main

main返回的是後面一個值,即 sys.modules["__main__"].main

和原先想的不同,來驗證下

二、解決方案:

"and 優先順序大於or 的證明"

print(2 or 1 and False)#2

"and 為假時必然返回假,規定返回第一個為假的值的證明,因為只要檢測一個為假就能確定返回結果了,這樣成本最低"

print(None and 0)#None

print(0 and None)#0

print(1 and 0)#0

print(0 and 1)#0

"and 為真時必然返回真,規定返回最後一個為真的值的證明,因為只有檢測到最後一個為True時才能確定返回結果,返回最後一個成本最低"

print(1 and "ddd")#"ddd"

print("ddd" and 1)#1

"or 為真時返回真,規定返回第一個為真的值的證明,因為只要一個為真就可以確定返回結果了,直接返回檢測到的真,成本最低"

#均為真時

print(1 or 2)#1

print(2 or 1)#2

"or均為假時返回假,規定返回最後一個為假的值的證明,因為必然確定所有值為假,直接返回最後一個假值,成本最低"

print(0 or None)#None

print(None or 0)#0

返回的值均是括號後面的內容;

證明的結論如下:

首先證明了and 與or返回的不是bool型,而是原值

然後證明了如下結論:

1.and 優先順序大於or; and 

2.and 為假時,返回第一個為假的值,(因為只要檢測一個為假就能確定返回結果了)

3.and為真時,返回最後一個為真的值,(因為只有檢測到最後一個為True時才能確定返回結果)

4.or為真時,返回第一個為真的值,(因為只要一個為真就可以確定返回結果了,直接返回檢測到的值)

5.or為假時,返回最後一個為假的值,(因為必須檢測沒有一個真值,才會確定返回結果)

個人認為使用了成本最低理論,即返回確定最終結果的值


原文:https://blog.csdn.net/ningyanggege/article/details/81334984