- Python編程基礎與數據分析
- 王娟 華東 羅建平
- 1816字
- 2020-09-11 16:42:30
2.2 運算符
Python中提供了非常豐富的運算符,有算術運算符、賦值運算符、比較運算符、邏輯運算符、位運算符等。這些運算符由Python解釋器直接提供,無需引入庫即可直接使用。本節分別介紹這些運算符。
2.2.1 算術運算符
Python中的算術運算符主要用于加減乘除及取整、取模和冪運算,共有7個,如表2.1所示。
表2.1 算術運算符

“+”運算符除了做正常的加法運算外,在序列中還可將兩個對象合并,具體的使用方式可以參看序列章節。如:
>>> 3+4 7 >>> "a"+"b" 'ab'
“*”運算符除了可以將兩個對象相乘以外,還可以將字符串重復若干次。如:
>>> 3*6 18 >>> "ab"*5 'ababababab'
/ 和 //(地板除):/ 表示整數除法和浮點除法;//表示獲取不大于商的整數,可對整數和浮點數進行計算。如:
>>> 12/10 1.2 >>> 12//10 1 >>> -12/10 -1.2 >>> -12//10 -2
-12//10的結果-2是因為-12除以10得到的商為-1.2,取小于-1.2的最大整數值為-2。
“%”為取模運算,得到兩個數的余數。如:
>>> 134%10 4 >>> -134%10 6 >>> 134%-10 -6
正數的取模比較好理解,但是負數的取模,可能不太好理解。-134%10為什么是6?這跟所有程序語言的取模計算公式有關,Python也不例外。公式如下:
r=a-n* (a//n)
其中r為余數,a為被除數,n為除數。
由上面的公式可以得到:
-134%10=-134-10*(-134//10)=-134-10*(-14)=6
同理,134%-10=-6。
“**”為冪運算符。
>>> 2**5 ## 表示25 32
注意:算術運算符是有優先級的,**→(+、-)→* 、/ 、// 、% → +、- 從左往右依次降低。(+、-)為正負號。* 、/ 、// 、%,優先級相同,+、-優先級相同,如果想提升優先級也可加小括號( )。
如:
>>> print ( (-4) **2) 16 >>> print (-4**2) -16 >>> print (30//7*4+15%2**3) 23
2.2.2 賦值運算符
Python中的賦值運算符除了可以給對象賦值以外,同時還兼有計算的功能。
如表2.2所示,除“=”號外,其余的7個賦值運算符也稱為增強賦值運算符。
表2.2 賦值運算符

其中增強型運算符,可將左側變量與右側表達式進行運算,并將結果賦給左側變量。
>>> a+=b ##等同于a=a+b >>> print (a) 25 >>> a-=b ##等同于a=a-b >>> print (a) 15 >>> a*=3 ##等同于a=a*3 >>> print (a) 45 >>> a/=5 ##等同于a=a/5 >>> print (a) 9.0 >>> a%=2 ##等同于a=a%2 >>> print (a) 1.0 >>> a=4 >>> a**=3 ##等同于a=a**3 >>> print (a) 64 >>> a//=9 ##等同于a=a//9 >>> print (a) 7
2.2.3 比較(關系)運算符
Python中的比較運算符用于兩個運算對象之間的比較,有等于、不等于、大于、小于、大于等于、小于等于6種類型的比較運算符。比較運算的結果返回的為邏輯值。如表2.3所示。
表2.3 比較運算符

比較運算符中的等于、不等于、大于、小于、大于等于及小于等于示例程序如下:
>>> a=5 >>> b=8 >>> a==b False >>> a!=b True >>> a>b False >>> a<b True >>> a>=b False >>> a<=b True
字符串、列表、元組等對象按順序進行比較,字符串按字符的ASCII碼進行比較。如:
>>> x="abc" >>> y="acd" >>> print (x>y) False >>> print (x<y) True
先取x中的字符“a”與y中的字符“a”比較,兩者相等;再取x中的字符“b”與y中的字符“c”比較,“b”的ASCII碼值比“c”的ASCII碼值小,所以可以判斷x>y為False,x<y為True。
注意:在Python 3.0后,已不再使用<>(不等于)這個關系運算符。
在比較運算符中出現如下這種形式的比較運算,可以將其理解為兩個關系運算后的與運算。
>>> print (3<4<9)
True
上面的表達式可以理解為print (3<4 and 4<9),3<4返回值為True,4<9返回值為True,True and True,最后輸出為True。
>>> print (4<6!=6)
False
上面的表達式同樣可以理解為print (4<6 and 6!=6),4<6返回值為True,6!=6返回值為False,True and False,最后輸出為False。
2.2.4 位運算符
Python中的位運算符是按數值對應的二進制來進行計算的,主要有按位與、按位或、按位異或、按位取反、左移及右移運算,位運算規則如表2.4所示。
表2.4 位運算符

“&”按位與,先將左右兩邊的對象轉換成二進制后,再進行按位與運算。如:
>>> a=10 ## a=0000 1010
>>> b=25 ## b=0001 1001
>>> a & b
8
先將a,b轉換成等值的二進制數,a=0000 1010,b=0001 1001,進行按位與運算的結果為0000 1000,輸出時轉換成了十進制數為8。
其他位運算符操作之前也必須將操作對象先轉換成二進制后,再進行運算。
>>> a | b 27 a=0000 1010, b=0001 1001, 按位或的結果為0001 1011, 輸出時轉換成了十進制數為27。 >>> a^b 19
a=0000 1010,b=0001 1001,按位異或的結果為0001 0011,輸出時轉換成了十進制數為19。
在計算機內部負數是用補碼來表示的,而正數是用原碼表示的。所以下面四點請牢記:
(1)在計算機里面,負數是以補碼表示的;
(2)原碼求補碼:先求負數絕對值的原碼,最高位變為1,其他位按位取反,再末位+1;
(3)補碼求原碼:末尾-1,符號位不變,其他位按位取反;
(4)取反操作是也是根據數值在計算機內部的二進制表示進行取反的。正數用原碼取反,負數用補碼取反。
>>> ~a
-11
求~a,即為求~10。
10的原碼:0000 1010
按位取反得到:1111 0101,從最高位(符號位:1為負數,0為正數)可以知道這是一個負數,因為負數以補碼表示,所以問題就變成了由補碼來求原碼了。
補碼:1111 0101
反碼:1111 0100
原碼:1000 1011
因為1000 1011的十進制數表示為-11,所以~a的值為-11。
如果求~-10,因為-10在計算機內部是用補碼表示的,所以要先得到-10的補碼表示。
10的原碼:0000 1010
-10的原碼:1000 1010
-10的反碼:1111 0101
-10的補碼:1111 0110
然后再按位取反:0000 1001
所以~-10為9
>>> b>>2
6
這邊b用8位二進制數表示為b=0001 1001,往右移位,因為a為正數,所以低位丟棄,高位補0,結果為0000 0110,轉換成十進制數為6。
2.2.5 邏輯運算符
Python中的邏輯運算符有與(and)、或(or)、非(not),參與運算的兩個對象,結果不一定為True或False。邏輯運算的規則如表2.5所示。
表2.5 邏輯運算符

“and”和“or”運算符,在Python中的結果有時不一定為False或True。如:
>>> a=10 >>> b=20 >>> False and b ##因為左側為False, 結果直接為False False >>> True and b ##因為左側為True, 結果直接為右側的對象 20 >>> False or b ##因為左側為False, 結果直接為右側的對象 20 >>> True or b ##因為左側為True, 結果直接為True True >>> a and b ##a為10, 非0為True, 結果為右側對象 20 >>> a or b ##a為10, 非0為True, 結果為a 10
- Java EE 6 企業級應用開發教程
- Dynamics 365 Application Development
- Unity Virtual Reality Projects
- C/C++常用算法手冊(第3版)
- 零基礎學MQL:基于EA的自動化交易編程
- 微信小程序開發解析
- C#程序設計基礎:教程、實驗、習題
- C程序設計實踐教程
- C語言程序設計簡明教程:Qt實戰
- Hands-On GUI Programming with C++ and Qt5
- Java 9 Programming By Example
- Android Studio Cookbook
- jQuery技術內幕:深入解析jQuery架構設計與實現原理
- Hacking Android
- Learning Grunt