
當(dāng)編寫(xiě)含有一個(gè)操作符以上的表達(dá)式時(shí),Python將按照所謂的優(yōu)先級(jí)法則對(duì)其進(jìn)行分組,這個(gè)分組決定了表達(dá)式各部分的計(jì)算順序。表中的操作符越靠后的優(yōu)先級(jí)越高,位于同一行的表達(dá)式在組合的時(shí)候通常從左到右組合(除了冪運(yùn)算,它是從右向左組合的,還有比較運(yùn)算,是從左到右連接的)。
當(dāng)使用括號(hào)劃分子表達(dá)式的時(shí)候,就會(huì)超越Python的優(yōu)先級(jí)規(guī)則。Python總會(huì)先執(zhí)行計(jì)算括號(hào)中的表達(dá)式,然后再將結(jié)果用在整個(gè)表達(dá)式中。
所有的Python操作符可以通過(guò)Python的類或C擴(kuò)展類型被重載(即實(shí)現(xiàn)),讓它也能工作于你所創(chuàng)建的對(duì)象中。Python自身自動(dòng)重載了某些操作符,能夠根據(jù)所處理的內(nèi)置對(duì)象的類型而執(zhí)行不同的操作。這種特性通常稱作多態(tài)。
下面介紹常用的操作符,其中一些常用于某些類型的操作符,會(huì)在后續(xù)的介紹對(duì)應(yīng)類型的章節(jié)中詳細(xì)介紹。
一、賦值運(yùn)算符
1、 賦值運(yùn)算符(=)
Python 語(yǔ)言中, 等號(hào)( = )是主要的賦值運(yùn)算符,其他的是增量賦值運(yùn)算符。
賦值并不是直接將一個(gè)值賦給一個(gè)變量, 盡管你可能根據(jù)其它語(yǔ)言編程經(jīng)驗(yàn)認(rèn)為應(yīng)該如此。在 Python 語(yǔ)言中,對(duì)象是通過(guò)引用傳遞的。在賦值時(shí),不管這個(gè)對(duì)象是新創(chuàng)建的,還是一個(gè)已經(jīng)存在的,都是將該對(duì)象的引用(并不是值)賦值給變量(具體原理下面會(huì)有詳細(xì)介紹)。
同樣的, 如果你比較熟悉 C, 你會(huì)知道賦值語(yǔ)句被當(dāng)成一個(gè)表達(dá)式(可以返回值)。不過(guò)這條并不適合于 Python,Python 的賦值語(yǔ)句不會(huì)返回值。
類似下面的語(yǔ)句在 Python 中是非法的:

鏈?zhǔn)劫x值沒(méi)問(wèn)題:

2、 增量賦值
等號(hào)可以和一個(gè)算術(shù)運(yùn)算符組合在一起, 將計(jì)算結(jié)果重新賦值給左邊的變量,這被稱為增量賦值。

增量賦值相對(duì)普通賦值不僅僅是寫(xiě)法上的改變,最有意義的變化是第一個(gè)對(duì)象(我們例子中的 x)僅被處理一次。如果值是可變對(duì)象會(huì)被就地修改(無(wú)修拷貝引用), 如果值是不可變對(duì)象則和 x = x + 1 的結(jié)果一樣(x會(huì)被分配一個(gè)新對(duì)象:2)。
注意:Python 不支持 C 語(yǔ)言中的自增 ++和自減 -- 運(yùn)算符, 這是因?yàn)?+ 和 - 也是單目運(yùn)算符,Python 會(huì)將 --n 解釋為-(-n) 從而得到 n,同樣 ++n 的結(jié)果也是 n。
3、 多重賦值

在上面的例子中,一個(gè)值為 1 的整數(shù)對(duì)象被創(chuàng)建,該對(duì)象的同一個(gè)引用被賦值給 x、y 和 z 。也就是將一個(gè)對(duì)象賦給了多個(gè)變量。在 Python 當(dāng)中,將多個(gè)對(duì)象賦給多個(gè)變量也是可以的。
4、“多元”賦值
另一種將多個(gè)變量同時(shí)賦值的方法我們稱為多元賦值(multuple)。采用這種方式賦值時(shí), 等號(hào)兩邊的對(duì)象都是元組。


在上面的 C 代碼片段中,變量 x 和變量 y 的值被互相交換。 臨時(shí)變量 tmp 用于在將 y 賦值給 x 前先保存 x 的值。將 y 的值賦給 x 之后, 才可以將保存在 tmp 變量中的 x 的值賦給 y。Python 的多元賦值方式可以實(shí)現(xiàn)無(wú)需中間變量交換兩個(gè)變量的值。

二、算數(shù)運(yùn)算符

加、減、乘、除和取余都是標(biāo)準(zhǔn)運(yùn)算符。Python 有兩種除法運(yùn)算符,單斜杠用作傳統(tǒng)除法(和數(shù)學(xué)中的除法一樣),雙斜杠用作地板除(取比商小的最大整數(shù))。還有一個(gè)乘方運(yùn)算符, 雙星號(hào)(**)。

就象你看到的: + 和 - 優(yōu)先級(jí)最低, *, /, //, %優(yōu)先級(jí)較高, 單目運(yùn)算符 + 和 - 優(yōu)先級(jí)更高, 乘方的優(yōu)先級(jí)最高。(3 ** 2) 首先求值, 然后是 (-2 * 4), 然后是對(duì)兩個(gè)結(jié)果進(jìn)行求和。建議對(duì)于復(fù)雜的運(yùn)算表達(dá)式使用小括號(hào)()來(lái)限制運(yùn)算順序,以使代碼更清晰,同時(shí)避免錯(cuò)誤。
下面總結(jié)了所有的算術(shù)運(yùn)算符, 從上到下, 計(jì)算優(yōu)先級(jí)依次降低:
注意: ** 運(yùn)算符優(yōu)先級(jí)高于單目運(yùn)算符
X / Y
傳統(tǒng)除法(真除法),無(wú)論任何類型都會(huì)返回包含任何余數(shù)的一個(gè)浮點(diǎn)結(jié)果。
X // Y
Floor除法,這個(gè)操作會(huì)取傳統(tǒng)除法的結(jié)果之下的最接近的整數(shù),針對(duì)整數(shù)操作會(huì)返回整數(shù),如果有任何一個(gè)操作數(shù)是浮點(diǎn)數(shù),則返回一個(gè)浮點(diǎn)數(shù)。其直接效果就是向下舍入,并不是嚴(yán)格的截?cái)唷?div id="u0z1t8os" class="image-package">







