官术网_书友最值得收藏!

2.4.4 “與”和“或”的短路

邏輯運算符組成的表達式就叫作邏輯表達式。邏輯表達式可以是連續的邏輯運算,運算順序是從左到右進行的,比如:


>>> True and True or not False and 1+3
True

我們來分析一下計算的過程,如圖2-4所示:從左到右,第一層級首先計算True and True、not False和1 + 3,結果分別是True、True和4;然后第二層級計算True or True,得到True;最后計算第三層級True and 4,結果是True。

圖2-4 邏輯運算的順序

克里克里想了一會兒,說:“看起來not運算和算術運算的優先級比and和or高一點?。 ?/p>

“不錯哦!你知道的還不少。”西西船長表揚克里克里,然后又說,“那你知不知道not運算和or運算還具有短路特性呢?”

“短路特性?”克里克里不解地問,“就像電路里的短路一樣嗎?”他腦海里出現了如圖2-5所示的場景。

圖2-5 當發生短路現象時電流不流經燈泡

“有些類似!請聽我說?!蔽魑鞔L回答克里克里,“在沒有括號參與時,邏輯表達式從左到右,依次運算,當遇到第一個能決定結果的邏輯值后,就廢棄后面的所有運算。”

1)對于and運算,只要參與and運算的對象中有一個代表False,那么不管其他對象是什么,結果都會是False。所以只要從左到右計算得到第一個False,后面的都不會再計算了。她寫了一段代碼作為證據:


>>> 99 and -4 and 'a' and True and 2+3
5
>>> 99 and -4 and 'a' and False and 2+3
False

第一行代碼直到最后都沒有出現False,所以得到結果為最后一項的計算值5;第二行代碼遇到False即得到結果False,后續的2 + 3不再執行,被“短路”了。

2)對于or運算,只要參與or運算的對象中有一個代表True,那么不管其他對象是什么,結果都會是True。所以只要從左到右計算得到第一個True,后面的都不會再計算了。她同樣寫了一段代碼作為證據:


>>> 0 or False or 5-5 or '99'
'99'
>>> 0 or False or '99' or 99
'99'

第一行代碼直到最后才出現字符串“99”,它代表True,所以得到結果為最后一項的計算值“99”;第二行代碼遇到字符串“99”,它代表邏輯True,所以得到結果“99”,后續的整數99不再考慮,被“短路”了。

3)not運算只有兩個符號(如not True),被稱為兩目運算,不存在短路問題。

【練一練】

請寫出1 and 2 or 3 and 4 or not 5 and 6 + 7 or 8 and not 0的結果,并描述計算的順序。

?

主站蜘蛛池模板: 古蔺县| 东丰县| 湄潭县| 迭部县| 进贤县| 翼城县| 松原市| 宁远县| 大埔区| 印江| 宜城市| 浪卡子县| 稷山县| 乌审旗| 稷山县| 阿克苏市| 昌黎县| 应用必备| 香港 | 镇江市| 武鸣县| 剑川县| 景东| 麟游县| 汝州市| 乾安县| 合水县| 洛川县| 山东省| 大城县| 衡阳县| 同仁县| 天峨县| 敦化市| 手机| 龙门县| 穆棱市| 浦城县| 乐亭县| 灵宝市| 陇西县|