Python運(yùn)算符優(yōu)先級,是描述在計(jì)算機(jī)運(yùn)算計(jì)算表達(dá)式時(shí)執(zhí)行運(yùn)算的先后順序。 先執(zhí)行具有較高優(yōu)先級的運(yùn)算,然后執(zhí)行較低優(yōu)先級的運(yùn)算。 例如,我們常說的先執(zhí)行相乘和除,再執(zhí)行加減運(yùn)算。 新版Python運(yùn)算符優(yōu)先級文檔,全新體驗(yàn)
下表從高到低列出了運(yùn)算符的優(yōu)先級。同一行中的運(yùn)算符具有相同優(yōu)先級,然后運(yùn)算符的優(yōu)先級是運(yùn)算表達(dá)式從左到右。
| 優(yōu)先級 | 運(yùn)算符 | 描述 |
|---|---|---|
| 1 | lambda | Lambda表達(dá)式 |
| 2 | or | 布爾“或” |
| 3 | and | 布爾“與” |
| 4 | not x | 布爾“非” |
| 5 | in,not in | 成員測試 |
| 6 | is,is not | 同一性測試 |
| 7 | <,<=,>,>=,!=,== | 比較 |
| 8 | | | 按位或 |
| 9 | ^ | 按位異或 |
| 10 | & | 按位與 |
| 11 | <<,>> | 移位 |
| 12 | +,- | 加法與減法 |
| 13 | *,/,% | 乘法、除法與取余 |
| 14 | +x,-x | 正負(fù)號 |
| 15 | ~x | 按位翻轉(zhuǎn) |
| 16 | ** | 指數(shù) |
| 17 | x.attribute | 屬性參考 |
| 18 | x[index] | 下標(biāo) |
| 19 | x[index:index] | 尋址段 |
| 20 | f(arguments...) | 函數(shù)調(diào)用 |
| 21 | (experession,...) | 綁定或元組顯示 |
| 22 | [expression,...] | 列表顯示 |
| 23 | {key:datum,...} | 字典顯示 |
| 24 | 'expression,...' | 字符串轉(zhuǎn)換 |
一般情況下,運(yùn)算符優(yōu)先級表決定了哪個(gè)運(yùn)算符在別的運(yùn)算符之前計(jì)算。但是,如果你想要改變它們默認(rèn)計(jì)算順序,你得使用圓括號。例如,你想要在一個(gè)表達(dá)式中讓加法在乘法之前計(jì)算,那么你就得寫成類似(10 + 55) * 13的樣子。
Python運(yùn)算符通常由左向右結(jié)合,即具有相同優(yōu)先級的運(yùn)算符按照從左向右的順序計(jì)算。例如,2 + 3 + 4被計(jì)算成(2 + 3) + 4。一些如賦值運(yùn)算符那樣的運(yùn)算符是由右向左結(jié)合的,即a = b = c被處理為a = (b = c)。
在一個(gè)表達(dá)式中可能包含多個(gè)有不同運(yùn)算符連接起來的、具有不同數(shù)據(jù)類型的數(shù)據(jù)對象;由于表達(dá)式有多種運(yùn)算,不同的運(yùn)算順序可能得出不同結(jié)果甚至出現(xiàn)錯(cuò)誤運(yùn)算錯(cuò)誤,因?yàn)楫?dāng)表達(dá)式中含多種運(yùn)算時(shí),必須按一定順序進(jìn)行結(jié)合,才能保證運(yùn)算的合理性和結(jié)果的正確性、唯一性。優(yōu)先級從上到下依次遞減,最上面具有最高的優(yōu)先級,逗號操作符具有最低的優(yōu)先級。表達(dá)式的結(jié)合次序取決于表達(dá)式中各種運(yùn)算符的優(yōu)先級。優(yōu)先級高的運(yùn)算符先結(jié)合,優(yōu)先級低的運(yùn)算符后結(jié)合,同一行中的運(yùn)算符的優(yōu)先級相同。
# coding=utf-8 #優(yōu)先級的簡單實(shí)例 priorityNumber=2+1*4 print priorityNumber #輸出結(jié)果:6 #優(yōu)先級使用實(shí)例 #以下優(yōu)先級排名從高到低,在同一運(yùn)算中,先執(zhí)行優(yōu)先級高的再執(zhí)行低的,以此類推。 #Top 1:函數(shù)調(diào)用、尋址、下標(biāo) #Top 2:冪運(yùn)算** priorityNumber=2*2**3 print priorityNumber #輸出結(jié)果:16 #Top 3:翻轉(zhuǎn)運(yùn)算~ #Top 4:正負(fù)號 print 1+2*-3 #輸出結(jié)果:-5 #Top 5:*、/、% print 2+1*2/5 #輸出結(jié)果:2 #Top 6:+、- print 3<<2+1 #輸出結(jié)果:24 #Top 7:<<、>> #Top 8:按位&、^、| #Top 9:比較運(yùn)算符 priority=2*3+2<=2+1*7 print priority #輸出結(jié)果:True #Top 10:邏輯的not and or #Top 11:lambda表達(dá)式 2.python運(yùn)算符優(yōu)先級使用規(guī)律: #python優(yōu)先級使用規(guī)律 #1、一般情況下是左結(jié)合的 #ps:在沒有更高優(yōu)先級運(yùn)算符,即只有同級運(yùn)算符時(shí)時(shí)從左到右結(jié)合 print 1+2+3*5+5 #輸出結(jié)果:23 #2、出現(xiàn)賦值的時(shí)候一般是右結(jié)合 #ps:在有賦值運(yùn)算符時(shí),是右結(jié)合,即先算出1+2的值以后再賦值給priority priority=1+2 print priority #輸出結(jié)果:23
大家可能會覺得Python運(yùn)算符的優(yōu)先級不容易記憶,而且有時(shí)候還容易混淆。在實(shí)際運(yùn)用中根據(jù)業(yè)務(wù)邏輯可能我們知道要先做什么再做什么,但是卻忘記Python運(yùn)算符的優(yōu)先級了,該怎么辦?這里教大家一個(gè)殺手锏,絕對百試不爽。
#python運(yùn)算符優(yōu)先級大招 '''比如說有這個(gè)需求: 去商店買水,買3瓶水,每瓶5塊,再買一個(gè)綠箭(假設(shè)綠箭3塊),總共多少錢? 這個(gè)簡單的應(yīng)用非常明顯,需要先用乘法再用加法,如果這里你忘記了乘法和加法的優(yōu)先級,可以這樣: ''' print (3*5)+3 #輸出結(jié)果:18 #ps: 這只是一個(gè)簡單的例子,只是為了告訴大家實(shí)際應(yīng)用中實(shí)在不行咱就放大招。有備無患。 Python表達(dá)式 Python表達(dá)式基本概念: python中,值、變量和運(yùn)算符共同組成的整體稱為表達(dá)式 #python表達(dá)式 #1 字符串表達(dá)式 "Hello" #2 計(jì)算表達(dá)式 2+3 #3 賦值表達(dá)式 first=0 #4 變量表達(dá)式 first #5 值表達(dá)式 #等等
所以在我們非常清楚Python運(yùn)算優(yōu)先級的前提下,最好運(yùn)算符的書寫的時(shí)候,還是要以圓括號來標(biāo)記優(yōu)先級,這樣可讀性強(qiáng),也是一個(gè)良好的編程習(xí)慣。