Python中運算符分爲:html
算數運算符python |
描述python2.7 |
實例ide |
+函數 |
加 - 兩個對象相加spa |
假設變量: a=10,b=20,a + b 輸出結果 30code >>> a = 10htm >>> b = 15對象 >>> a + bip 25 >>> a = 'ni' >>> b = 'hao' >>> a + b 'nihao' |
- |
減 - 獲得負數或是一個數減去另外一個數 |
假設變量: a=10,b=20,a - b 輸出結果 -10 >>> a = 10 >>> b = 3 >>> a - b 7 |
* |
乘 - 兩個數相乘或是返回一個被重複若干次的字符串 |
假設變量: a=10,b=20,a * b 輸出結果 200 >>> a = 2 >>> b = 10 >>> a * b 20 |
/ |
除 - x除以y |
假設變量: a=10,b=20,b / a 輸出結果 2 >>> a = 2 >>> b = 10 >>> b / a 5.0 |
% |
取模 - 返回除法的餘數 |
假設變量: a=10,b=20,b % a 輸出結果 0 >>> a = 2 >>> b = 10 >>> b % a 0 |
** |
冪 - 返回x的y次冪 |
假設變量: a=10,b=20,a**b 爲10的20次方, 輸出結果 100000000000000000000 >>> a = 2 >>> b = 10 >>> a ** b 1024 |
// |
取整除 - 返回商的整數部分 |
假設變量: a=10,b=20,9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0 >>> a = 2 >>> b = 10 >>> b // a 5 |
比較運算符 |
描述 |
實例 |
== |
等於 - 比較對象是否相等 |
假設變量: a=10,b=20,(a == b) 返回 False。 >>> a = 2 >>> b = 10 >>> a == b False |
!= |
不等於 - 比較兩個對象是否不相等 |
假設變量: a=10,b=20,(a != b) 返回 true. >>> a = 2 >>> b = 10 >>> a != b True |
<> |
不等於 - 比較兩個對象是否不相等 |
Python3.6中沒有這個操做符 |
> |
大於 - 返回x是否大於y |
假設變量: a=10,b=20,(a > b) 返回 False。 >>> a = 2 >>> b = 10 >>> a > b False |
< |
小於 - 返回x是否小於y。全部比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。注意,這些變量名的大寫。 |
假設變量: a=10,b=20,(a < b) 返回 true。 >>> a = 2 >>> b = 10 >>> a < b True |
>= |
大於等於 - 返回x是否大於等於y。 |
假設變量: a=10,b=20,(a >= b) 返回 False。 >>> a = 10 >>> b = 10 >>> a >= b True |
<= |
小於等於 - 返回x是否小於等於y。 |
假設變量: a=10,b=20,(a <= b) 返回 true。 >>> a = 10 >>> b = 10 >>> a <= b True |
賦值運算符 |
描述 |
實例 |
= |
簡單的賦值運算符 |
假設變量: a=10,b=20,c = a + b 將 a + b 的運算結果賦值爲 c >>> a = 10 >>> a 10 >>> a = 10 + 5 >>> a 15 |
+= |
加法賦值運算符 |
假設變量: a=10,b=20,c += a 等效於 c = c + a >>> a = 0 >>> a += 1 >>> a 1 >>> a += 10 >>> a 11 >>> a = 'a' >>> a += 'b' >>> a 'ab' |
-= |
減法賦值運算符 |
假設變量: a=10,b=20,c -= a 等效於 c = c - a >>> a = 10 >>> a -= 1 >>> a 9 |
*= |
乘法賦值運算符 |
假設變量: a=10,b=20,c *= a 等效於 c = c * a >>> a = 2 >>> a *= 10 >>> a 20 >>> a = 'z' >>> a *= 5 >>> a 'zzzzz' |
/= |
除法賦值運算符 |
假設變量: a=10,b=20,c /= a 等效於 c = c / a >>> a = 10 >>> a /= 2 >>> a 5.0 |
%= |
取模賦值運算符 |
c %= a 等效於 c = c % a >>> a = 10 >>> a %= 3 >>> a 1 |
**= |
冪賦值運算符 |
c **= a 等效於 c = c ** a >>> a = 2 >>> a **= 10 >>> a 1024 |
//= |
取整除賦值運算符 |
c //= a 等效於 c = c // a >>> a = 11 >>> a //= 2 >>> a 5 |
邏輯運算符 |
邏輯表達式 |
描述 |
實例 |
and |
x and y |
布爾"與" - 若是 x 爲 False,x and y 返回 False,不然它返回 y 的計算值。 >>> a = 0 >>> b = 1 >>> a and b 0 >>> a = 'a' >>> a and b 1 |
(a and b) 返回 20。 |
or |
x or y |
布爾"或" - 若是 x 是非 0,它返回 x 的值,不然它返回 y 的計算值。 >>> a = 0 >>> b = 1 >>> a or b 1 |
(a or b) 返回 10。 |
not |
not x |
布爾"非" - 若是 x 爲 True,返回 False 。若是 x 爲 False,它返回 True。 >>> a = 0 >>> not a True |
not(a and b) 返回 False |
位運算符 |
描述 |
實例 |
& |
按位與運算符:參與運算的兩個值,若是兩個相應位都爲1,則該位的結果爲1,不然爲0 |
(a & b) 輸出結果 12 ,二進制解釋: 0000 1100 >>> a=1 >>> b=2 >>> a&b 0 >>> b=3 >>> a&b 1 |
| |
按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1。 |
(a | b) 輸出結果 61 ,二進制解釋: 0011 1101 >>> a = 1 >>> b = 2 >>> a|b 3 |
^ |
按位異或運算符:當兩對應的二進位相異時,結果爲1 |
(a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001 >>> a = 1 >>> b = 3 >>> a^b 2 |
~ |
按位取反運算符:對數據的每一個二進制位取反,即把1變爲0,把0變爲1 |
(~a ) 輸出結果 -61 ,二進制解釋: 1100 0011, 在一個有符號二進制數的補碼形式。 >>> a = 0 >>> ~a -1 >>> a = 1 >>> ~a -2 |
<< |
左移動運算符:運算數的各二進位所有左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。 |
a=2,a << 2 輸出結果 8 ,二進制解釋: 0000 0010向右移兩位,0000 0100。 >>> a = 2 >>> a << 2 8 |
>> |
右移動運算符:把">>"左邊的運算數的各二進位所有右移若干位,">>"右邊的數指定移動的位數 |
a >> 2 輸出結果 15 ,二進制解釋: 0000 1111 >>> a = 16 >>> a >> 1 8 |
成員運算符 |
描述 |
實例 |
in |
若是在指定的序列中找到值返回 True,不然返回 False。 |
x 在 y 序列中 , 若是 x 在 y 序列中返回 True。 >>> a = 'a' >>> b = 'cba' >>> a in b True >>> b = list(b) >>> b ['c', 'b', 'a'] >>> a in b True |
not in |
若是在指定的序列中沒有找到值返回 True,不然返回 False。 |
x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。 >>> a = 'a' >>> b = 'cba' >>> a not in b False >>> b = list(b) >>> b ['c', 'b', 'a'] >>> a not in b False
|
身份運算符 |
描述 |
實例 |
is |
is是判斷兩個標識符是否是引用自一個對象 |
x is y, 若是 id(x) 等於 id(y) , is 返回結果 1 >>> a = 'a' >>> b = 'b' >>> a is b False >>> b = 'a' >>> a is b True >>> id(a) 2422111596248 >>> id(b) 2422111596248 |
is not |
is not是判斷兩個標識符是否是引用自不一樣對象 |
x is not y, 若是 id(x) 不等於 id(y). is not 返回結果 1 >>> a = 'a' >>> b = 'b' >>> a is not b True >>> b = 'a' >>> a is b False >>> id(a) 2422111596248 >>> id(b) 2422111596248 |
建議:字符串拼接操做盡可能多用join,而減小用」+「
join操做時會先計算字符操做所用到的空間總和大小,而後申請內存。而後進行字符串鏈接操做。因此join的時間複雜的近似O(n)。
+操做符鏈接操做符時,因爲字符串是不可變對象,因此多個字符串拼接操做時從前向後的依此計算,用前一次的計算結果再和下一個字符串拼接。因此每次操做都須要申請一塊新的內存。舉例:S1+S2+S3+…Sn,實際過程是:一、先申請一塊內存;二、將S一、S2複製到這塊內存中(這樣這塊內存就是S1+S2);三、繼續第一步申請內存;四、繼續把第二步的內存內容和S3複製到第三步申請的內存。而後重複第一步到第二步至計算到Sn。因此操做符」+「的時間複雜的近似O(n^2)
對於不一樣個數字符串拼接操做時join和+所用時間對比(python2.7環境運行結果):
連接字符串數量 |
join操做消耗時間 |
+操做消耗時間 |
3 |
0.011083841323852539 |
0.02231597900390625 |
10 |
0.014094829559326172 |
0.05936312675476074 |
100 |
0.1445930004119873 |
0.6129770278930664 |
1000 |
1.340691089630127 |
6.07816481590271 |
10000 |
13.942554950714111 |
61.60126209259033 |
參考計算運算上面時間的代碼:
#!/usr/bin/env python # -*- coding: utf-8 -*- import timeit strlist = ["it is a value string will not keep in memorty" for n in range(100000)] def join_test(): return ''.join(strlist) def plus_test(): result = '' for i,v in enumerate(strlist): result = result + v return result if __name__ == '__main__': x = [3,10,100,1000,10000] jointd = {3:0,10:0,100:0,1000:0,10000:0} plustd = {3:0,10:0,100:0,1000:0,10000:0} for i in x: jointimer = timeit.Timer("join_test()","from __main__ import join_test") jointd[i] = jointimer.timeit(number=i) plustimer = timeit.Timer("plus_test()","from __main__ import plus_test") plustd[i] = plustimer.timeit(number=i) print ('join use time:\n',jointd) print ('plus use time:\n', plustd)
區別:
is是比較對象是否相同(is表示對象標識符即object identity),即用id()函數查看的地址是否相同,若是相同則返回True,若是不一樣則返回False。is不能被重載。
」==「是比較兩個對象的值是否相等,此操做符內部調用的是」__eq__()「方法。因此a==b等效於a.__eq__(b),因此」==「能夠被重載。