Python里有很多運算符(operator),這節就讓我們來詳細學一學。
注意:本文沒有特別說明的地方,只考慮bool、int、float三種類型。例如“兩邊操作數類型相同時,得到的結果為操作數類型”這句話只需要考慮上述三種類型就可以了。
算術運算符
加運算符(plus,+)
+運算符將兩個數相加。例如1+2等於3,1.23+4.56等於5.79。
+運算符用於一個數前時等於它本身。例如+(-2)等於-2,+2等於2。
減運算符(minus,-)
-運算符將兩個數相減。例如4-1等於3,1.23-4.56等於-3.33。
-運算符也可以計算一個數的相反數。例如-(-7)等於7。
乘運算符(multiply ... by ...,*)
*運算符將兩個數相乘。例如12*7等於84,4.5*0.9等於4.05。
除運算符(divided by,/)
/運算符將兩個數相除。例如16/4等於4.0,4/3等於1.33333...。注意/得到的一定是float類型。如果除數為0,會產生ZeroDivisionError。
地板除運算符(floor division,//)
//運算符將兩個數相除,得到答案的整數部分。例如4//3等於1,4.0//3.0等於1.0。如果除數為0,會產生ZeroDivisionError。
取余運算符(modulo,%)
%運算符求兩個數相除的余數,也叫模。例如4%3等於1,4.0%3.0等於1.0。如果除數為0,會產生ZeroDivisionError。
乘方運算符(power,**)
**運算符用來計算乘方。a ** b得到a的b次方。例如,2 ** 7等於128,4 ** -2等於0.0625。
在除了/以外的運算符中,兩邊操作數類型相同時,得到的結果為操作數類型;對於/運算符,得到的結果一定為float類型。
比較運算符
大於運算符(greater than,>)
大於運算符用來判斷一個數是否大於另一個數。結果為bool,如果大於返回True,否則返回False。例如1>0為True,1>2為False。
小於運算符(lesser than,<)
小於運算符用來判斷一個數是否小於另一個數。結果為bool,如果小於返回True,否則返回False。例如0<1為True,1<0為False。
等於運算符(equal to,==)
等於運算符用來判斷一個數是否等於另一個數。結果為bool,如果等於返回True,否則返回False。例如1+1==2為True,1+1==3為False。
注意區分==和=,后者是賦值號。a = b表示將b賦給a,a == b表示a與b是否相等。請勿混淆。
不等於運算符(not equal to,!=)
不等於運算符用來判斷一個數是否不等於另一個數。結果為bool,如果不等於返回True,否則返回False。例如1+1!=3為True,1+1!=2為False。
大於等於運算符(greater than or equal to,>=)
大於等於運算符用來判斷一個數是否大於或等於另一個數。結果為bool,如果大於或等於返回True,否則返回False。例如1>=1為True,0>=1為False。
小於等於運算符(lesser than or equal to,<=)
小於等於運算符用來判斷一個數是否小於或等於另一個數。結果為bool,如果小於或等於返回True,否則返回False。例如1<=1為True,1<=0為False。
邏輯運算符
and運算符
and運算符(一般)用於兩個布爾值之間,如果兩邊都為True,則返回True,否則返回False。例如True and True、1 > 0 and 1 > -1為True,True and False、False and False、1 == 0 and 1 > 0為False。
and也可以用於其它類型,以后會有更深入的介紹。
or運算符
or運算符(一般)用於兩個布爾值之間,如果兩邊有任意一個為True,則返回True,否則返回False。例如1 > 0 or 1 > 1、True or True、True or False為True,1 == 2 or 1 == 3為False。
or也可以用於其它類型,以后會有更深入的介紹。
not運算符
not運算符(一般)用於一個布爾值之前,如果該值為True,則返回False,否則返回True。例如not True等於False,not 1 == 0為True。
not也可以用於其它類型,以后會有更深入的介紹。
賦值運算符
=運算符
=運算符將右邊的值賦給左邊的變量。例如:
>>> a = 0 >>> a 0 >>> a = 10 >>> a 10 >>> a = True >>> a True
+=運算符
+=運算符將左邊的變量加上右邊的值。a += b是a = a + b的縮略形式。
-=運算符
-=運算符將左邊的變量減去右邊的值。a -= b是a = a - b的縮略形式。
*=運算符
*=運算符將左邊的變量乘以右邊的值。a *= b是a = a * b的縮略形式。
/=運算符
/=運算符將左邊的變量除以右邊的值。a /= b是a = a / b的縮略形式。
//=運算符
//=運算符將左邊的變量地板除右邊的值。a //= b是a = a // b的縮略形式。
%=運算符
%=運算符將左邊的變量模右邊的值。a %= b是a = a % b的縮略形式。
**=運算符
**=運算符計算左邊變量的右邊次方(聽起來很奇怪)並賦給左邊變量。a **= b是a = a ** b的縮略形式。
類型轉換
轉換規則
bool->int
True為1,False為0。
bool->float
True為1.0,False為0.0。
int->bool
不為0轉換為True,為0轉換為False。
int->float
值不變,但是類型改變。例如1變成1.0,4變成4.0。
float->bool
不為0.0轉換為True,為0.0轉換為False。
float->int
向0取整。如果值為整數(例如1.0、2.0),不變;如果值為整數,取小於該數的最大整數;如果值為小數,取大於該數的最小整數。整數例如1.5->1,-1.5->-1。
其實還有更多的轉換規則,更多的以后再討論。
隱式類型轉換(implicit type cast)
當一個有兩個操作數的運算符兩邊操作數類型不同時,就會出現隱式類型轉換。限於目前讀者的Python水平,只講關於+、-、*、/、//、%、**這7個運算符的類型轉換。
在Python中,類型的級別是不同的,從低到高依次是bool、int、float(這不代表沒有其它類型,還記得嗎,文章前面說只考慮這三種類型)。
兩邊都是bool的情況
將兩邊的操作數都轉成int類型。對於除/以外的運算符,結果為int類型。對於/運算符,結果為float類型。
其它情況
將擁有低級類型的操作數轉換成高級類型。對於除/以外的運算符,結果為高級類型。對於/運算符,結果為float類型。
例如:
>>> True + False 1 >>> True - 2 -1 >>> 1.5 - True 0.5 >>> 1.2 * 7 8.4 >>> 1.7 - 4 -2.3
顯式類型轉換(explicit type cast)
上面說的是隱式類型轉換,Python也允許顯式類型轉換。顯式類型轉換指用戶明確指出要進行類型轉換。
顯式類型轉換的格式為type(value),type為目標類型,value為要轉換的值。例如int(2.5)表示將2.5轉換成int類型,即2;float(2)表示將2轉換成float類型,即2.0。
注意,對於變量,使用顯式類型轉換並不會改變其類型:
>>> a = 10.5 >>> int(a) 10 >>> a 10.5
雖然中間輸出了a轉換成int之后的值,但這只是個零時的值,不會改變a的類型。只有賦值才可以改變:
>>> a = int(a) >>> a 10
注意
有個地方要注意:在類型轉換中,只會暫時轉換變量的值的類型,不會改變變量類型!只有修改變量值才會出現類型上的變化。例如:
>>> a = 10 >>> a + 10.0 # a is still int! 20.0 >>> a += 10.0 # a is float! >>> a 20.0
ToDo
以后會補充優先級概念。如果不在cnblogs上發現本文,請訪問http://www.cnblogs.com/collectionne/p/6853051.html查看完整文章(也可能還沒補充)。
小結
1. Python的算術運算符有+、-、*、/、//、%、**。
2. Python的比較運算符有==、>、<、>=、<=。
3. Python的邏輯運算符有and、or、not。
4. Python的賦值運算符有+=、-=、*=、/=、//=、%=、**=。
5. 接受兩個操作數的運算符的操作數類型不一致時,會有隱式類型轉換。
6. 顯式類型轉換格式:type(value)。