摘要:?jiǎn)栴}出現(xiàn)中的,運(yùn)算,可以寫出比較復(fù)雜的演算表達(dá)式看了一些大神的演算規(guī)則解釋,覺(jué)得不是很好理解,有些人甚至理解錯(cuò)了規(guī)則。特殊情況當(dāng)表達(dá)式的所有值都是真值,并且運(yùn)算符不全部一致,那么第一個(gè)或演算完后直接返回。
問(wèn)題出現(xiàn):
Python 中的 or,and 運(yùn)算,可以寫出比較復(fù)雜的演算表達(dá)式; 看了一些大神的演算規(guī)則解釋,覺(jué)得不是很好理解,有些人甚至理解錯(cuò)了規(guī)則。 這里聊一下自己的理解。
其他人是怎么做的:
先看兩個(gè)例子熱下身: return 1 or 2 return 1 and 2 兩元的 or and 運(yùn)算可以通過(guò)死記來(lái)掌握: 如果有一個(gè)值為真,or 立刻返回第一個(gè)真值; ...... 如果你記得兩元的 or,and 運(yùn)算規(guī)則,你肯定知道正確答案: return 1 or 2 # 返回 1 return 1 and 2 # 返回 2 個(gè)人不推薦死記,因?yàn)槿菀淄浐蜕踔僚煜?
可以這樣理解:
Python 中, or 可以理解為找真值演算,從左到右發(fā)現(xiàn)真值就返回真值; 如果兩個(gè)都是假值,那就返回最后一個(gè)假值。 and 可以理解為找假值演算,從左到右發(fā)現(xiàn)假值就返回假值; 如果兩個(gè)都是真值,那就返回最后一個(gè)真值。 演算規(guī)則簡(jiǎn)單歸納一下就是: or :找真值: 如果有一個(gè)值為真,or 立刻返回第一個(gè)真值; 如果所有值都為假,or 返回最后一個(gè)假值。 and :找假值: 如果有一個(gè)值為假,and 立刻返回第一個(gè)假值; 如果所有值都為真,and 返回最后一個(gè)真值。
分析:
先來(lái)看比較難搞的三元演算表達(dá)式的例子: return 0 and 1 or 2 相信你也發(fā)現(xiàn)了,三元的運(yùn)算可以拆分成兩個(gè)兩元的運(yùn)算表達(dá)式: return 0 and 1 or 2 中: 0 and 1 :找假值,返回 0; 然后把返回的 0 繼續(xù)和后面的表達(dá)式做演算: 0 or 2 :找真值,返回 2。 所以: return 0 and 1 or 2 :# 返回 2 就是這么簡(jiǎn)單。 當(dāng)然,這還沒(méi)完! 還有一種特殊情況需要分析。
特殊情況分析:
當(dāng)表達(dá)式的所有值都是真值,并且運(yùn)算符不全部一致, 那么第一個(gè) or 或 and 演算完,直接返回。 舉兩個(gè)梨子: return 1 or 2 and 3 : 1 or 2:找真值返回1;因?yàn)槿恐刀际钦嬷?,且運(yùn)算符不全部一致,直接返回。 return 1 and 2 or 3 中: 1 and 2:找假值返回2;因?yàn)槿恐刀际钦嬷?,且運(yùn)算符不全部一致,直接返回。 所以: return 1 or 2 and 3 :# 返回 1 return 1 and 2 or 3 :# 返回 2
特殊情況的反面:
可能會(huì)有人有疑問(wèn): 既然全部值都為真值,且運(yùn)算符不全部一致的時(shí)候,只算第一個(gè) or 或 and , 那么全部值都為假值,且運(yùn)算符不全部一致的話,是不是也只算第一個(gè) or 或 and 呢! 答案是否定的。 我們來(lái)驗(yàn)證一下: return "" or 0 and None 上面的結(jié)果返回的是 0; return "" and None or 0 上面的結(jié)果返回的是 0; 那么全部值為真值,且運(yùn)算符全部一致的時(shí)候呢: return 0 and None and "" 上面的結(jié)果返回的是 0; return "" or None or 0 上面的結(jié)果返回的是 0; 所以,就算值都是假值,也要老老實(shí)實(shí)做運(yùn)算,別想著運(yùn)算第一個(gè) or 或 and 就完事了。
練習(xí)一下:
二元運(yùn)算: return 1 or 0 return 1 and 0 return 1 or 2 return 1 and 2 三元運(yùn)算: return 1 or 2 or 3 return 1 and 2 and 3 注意:上面兩個(gè)表達(dá)式的值全部為真值,但是表達(dá)式的演算符號(hào)相同。 四元運(yùn)算: return "" and None or 0 and 1 (參考答案預(yù)警!你不打算在心里演算一下么?)
參考答案:
return 1 and 0 :# 返回 0 return 1 or 0 :# 返回 1 return 1 or 2 :# 返回 1 return 1 and 2 :# 返回 2 return 1 or 2 or 3 :# 返回 1 return 1 and 2 and 3 :# 返回 3 return "" and None or 0 and 1 :# 返回 0
小結(jié):
or :找真值: 如果有一個(gè)值為真,or 返回第一個(gè)真值; 如果所有的值都為假,or 返回最后一個(gè)假值。 and :找假值: 如果有一個(gè)值為假,and 返回第一個(gè)假值; 如果所有的值都為真,and 返回最后一個(gè)真值。 特殊情況: 當(dāng)表達(dá)式的所有值都是真值,并且運(yùn)算符不全部一致, 那么第一個(gè) or 或 and 演算完后直接返回。
傳送門:http://blog.51cto.com/1350814...
本文系筆者原創(chuàng)
轉(zhuǎn)載請(qǐng)注明出處
—————————————
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42778.html
摘要:相信很多人在格式化字符串的時(shí)候都用的語(yǔ)法,提出一種更先進(jìn)的格式化方法并成為的標(biāo)準(zhǔn)用來(lái)替換舊的格式化語(yǔ)法,從開(kāi)始已經(jīng)實(shí)現(xiàn)了這一方法其它解釋器未考證。 showImg(https://segmentfault.com/img/remote/1460000018650325); 相信很多人在格式化字符串的時(shí)候都用%s % v的語(yǔ)法,PEP 3101 提出一種更先進(jìn)的格式化方法 str.for...
摘要:縮進(jìn)不一致,會(huì)導(dǎo)致運(yùn)行錯(cuò)誤。變量變量在使用前必須先定義即賦予變量一個(gè)值,否則會(huì)報(bào)錯(cuò)數(shù)據(jù)類型布爾只有和兩個(gè)值,表示真或假。 簡(jiǎn)介 Python 是一種高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。Python 由 Guido van Rossum 于 1989 年底在荷蘭國(guó)家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究所發(fā)明,第一個(gè)公開(kāi)發(fā)行版發(fā)行于 1991 年。 特點(diǎn) 易于學(xué)習(xí):Python ...
摘要:同樣的方法名稱,參數(shù)列表,返回類型,拋出的異常或者是父類拋出的異常的子類,子類重寫一個(gè)。使用方法過(guò)載的目的,根據(jù)調(diào)用時(shí)的實(shí)參表與形參表,來(lái)選擇對(duì)應(yīng)的方法體的。 問(wèn)題出現(xiàn): 即使對(duì)于一個(gè)經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員來(lái)說(shuō),方法重載和方法覆蓋的區(qū)別都能讓他猶豫一下, 對(duì)于新手來(lái)說(shuō),經(jīng)常容易弄混淆。 有沒(méi)有比較深入淺出的理解方式,能讓人過(guò)目不忘,用起來(lái)還能有條件反射般的速度呢? 其他人是怎么做的: 寫...
閱讀 1484·2021-11-15 11:37
閱讀 2274·2021-09-23 11:21
閱讀 1367·2019-08-30 15:55
閱讀 2205·2019-08-30 15:55
閱讀 2872·2019-08-30 15:52
閱讀 2877·2019-08-30 11:12
閱讀 1631·2019-08-29 18:45
閱讀 1962·2019-08-29 14:04