官术网_书友最值得收藏!

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
主站蜘蛛池模板: 伊金霍洛旗| 郑州市| 嵊州市| 霸州市| 盈江县| 台北县| 曲周县| 故城县| 漾濞| 绩溪县| 武陟县| 阜阳市| 浙江省| 肃宁县| 田阳县| 高密市| 海安县| 湖南省| 玉山县| 阿拉善盟| 湾仔区| 牟定县| 丰都县| 恩平市| 德惠市| 潮安县| 柳林县| 茶陵县| 叶城县| 临泉县| 登封市| 石屏县| 乐陵市| 宁明县| 图片| 新建县| 神木县| 乐安县| 社会| 定远县| 闵行区|