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