python3基礎篇(三)——運算符
1、閱讀這篇文章我能學到什麼?
這篇文章將爲你介紹python3運算符的使用。
——如果你覺得這是一篇不錯的博文,希望你能給一個小小的贊,感謝您的支持。
1 python3運算符
同其他語言一樣,python3也具有多種運算符。python3的7類運算符如下:
運算符類別 | 運算符 |
---|---|
算術運算符 | +、-、*、/、%、**、// |
關係運算符 | ==、!=、>、<、>=、<= |
賦值運算符 | =、+=、-=、*=、/=、%=、**=、//=、:= |
位運算符 | &、|、^、~、<<、>> |
邏輯運算符 | and、or、not |
成員運算符 | in、not in |
身份運算符 | is、is not |
2 算術運算符
算術運算符 | 描述 |
---|---|
+ | 求和 |
- | 求差或求相反數 |
* | 求積 |
/ | 求商 |
% | 取模 |
** | 冪運算 |
// | 取整除,結果向下(指往x軸負方向靠攏) |
代碼示例:
a = 10
b = 2
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b) #取模
print(a ** b) #冪運算,10^2
print(a // b) #求商且結果取整
print(-a) #取a的負數
print(1 // 3) #向下取整
print(-1 // 3)
運行結果爲:
12
8
20
5.0
0
100
5
-10
0
-1
3 關係運算符
關係運算符 | 描述 |
---|---|
== | 判等 |
!= | 判不等 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
代碼示例:
a = 10
b = 2
print(a == b)
print(a != b)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)
運行結果爲:
False
True
True
False
True
False
4 賦值運算符
賦值運算符 | 描述 |
---|---|
= | 直接賦值 |
+= | 加法賦值 |
-= | 減法賦值 |
*= | 乘法賦值 |
/= | 除法賦值 |
%= | 取模賦值 |
**= | 冪賦值 |
//= | 取整除賦值 |
:= | 海象賦值(python3.8新增特性),使得python3開始支持在表達式內賦值。(c/c++的=賦值符號就可以在表達式內賦值) |
代碼示例:
a = 10
b = 3
a = b
print(a)
a += b
print(a)
a -= b
print(a)
a *= b
print(a)
a /= b
print(a)
a = 8
a %= b
print(a)
a **= b
print(a)
a //= b
print(a)
c = (n := a) * b #海象運算符,是的可以在表達式內賦值
print(c)
運行結果:
3
6
3
9
3.0
2
8
2
6
5 位運算符
位運算符 | 描述 |
---|---|
& | 按位與運算 |
| | 按位或運算 |
^ | 按位異或運算 |
~ | 按位取反運算 |
<< | 左移位運算 |
>> | 右移位運算 |
代碼示例:
a = 10
b = 9
print(bin(a)) #以二進制輸出
print(bin(b))
print(bin(a & b))
print(bin(a | b))
print(bin(a ^ b))
print(bin(~a))
print(bin(a << 1))
print(bin(b >> 1))
運行結果:
0b1010
0b1001
0b1000
0b1011
0b11
-0b1011
0b10100
0b100
解釋下爲什麼10按位取反的二進制結果是-0b1011,是因爲10是有符號數,其反碼是負數,而負數在計算機中是以補碼形式存儲的的(補碼就是反碼再加1)。
6 邏輯運算符
邏輯運算符 | 描述 |
---|---|
and | 邏輯與,x and y 當x爲真時結果爲y,當x爲假時結果爲x |
or | 邏輯或,x or y 當x爲真時結果爲x,當x爲假時結果爲y |
not | 邏輯非,not x 當x爲真時結果爲False,當x爲假時結果爲True |
代碼示例:
#以下類型在python3中都判爲邏輯假,其他爲真
if 0: #整形0爲假
print(True)
else:
print(False)
if 0.0: #浮點型0.0爲假
print(True)
else:
print(False)
if None: #類似c/c++中的NULL,爲假
print(True)
else:
print(False)
str = "" #空字符串爲假
if str:
print(True)
else:
print(False)
Set = () #空元組爲假
if Set:
print(True)
else:
print(False)
Tuple = [] #空列表爲假
if Tuple:
print(True)
else:
print(False)
Set = set() #空集合爲假
if Set:
print(True)
else:
print(False)
dic = {} #空字典爲假
if dic:
print(True)
else:
print(False)
#邏輯與
#x爲真,時輸出y的值
x = 1
y = 3
print(x and y) #x爲真,輸出y的值
x = 0
y = 2
print(x and y) #x爲0是假,輸出x
x = ()
y = 2
print(x and y) #x爲空元組是假,輸出x
#邏輯或
x = 1
y = 3
print(x or y) #x爲1是真,輸出x的值
x = 0
y = 2
print(x or y) #x爲0是假,輸出y的值
x = []
y = 2
print(x or y) #x爲空列表是假,輸出y的值
x = 0
print(not x) #x爲0是假,輸出True
x = 1
print(not x) #x爲1是真,輸出False
運算結果:
False
False
False
False
False
False
False
False
3
0
()
1
2
2
True
False
python3中將幾類判定爲假:0
,0.0
,None
,""
,()
,[]
,set()
,{}
,其他爲真。簡單記憶就是數值爲0時,None時,數據類型爲空時爲假。
7 成員運算符
成員運算符 | 描述 |
---|---|
in | 判定存在其中 |
not in | 判定不存在其中 |
Tuple = (1, 2, 3)
List = [1, 2, 3]
Set = {1, 2, 3}
Dictionary = {"1":1, "2":2, "3":3}
print(1 in Tuple)
print(1 in List)
print(1 in Set)
print("2" in Dictionary) #判斷字典中是否存在某個鍵値
運算結果:
True
True
True
True
8 身份運算符
身份運算符 | 描述 |
---|---|
is | 判斷是否引用自一個對象 |
is not | 判斷是否不是引用自同一個對象 |
說白了就是比較內存地址是否相同。==
用於比較變量內存中的值是否用,is
和is not
用於比較變量的內存地址是否相同。用id()
函數可以獲取對象的地址。
'''
python解釋器爲了節省內存,進行了一些優化。小數字緩存池是事先創建好的(不管你用不用它都存在
,當變量值爲區間[-5, 256]內時,變量的地址都是固定的小整數緩存池中固定的地址。所以當多個變量的
值相同且位於小整數區間[-5, 256]區間內時,他們的地址都是固定相同的。
'''
#觀察地址
a = -6 #多次運行地址會變
b = -5 #多次運行地址不變
c = 256 #多次運行地址不變
d = 257 #多次運行地址會變
print(id(a))
print(id(b))
print(id(c))
print(id(d))
x = -5 #小整數範圍內
print(id(x)) #對應小整數緩存池內固定地址
x = -6 #不在小整數範圍內
print(id(x)) #改變變量內的值,變量地址變了
x = -7 #再次改變變量值,不在小整數範圍內
print(id(x)) #改變變量內的值,變量地址又變了
a = 0
b = 0
c = 1
print(a is b) #地址相同,是引用自一個對象
print(a is c) #地址不相同,不是引用自一個對象
print(a is not a)
print(a is not c)
運算結果:
1932188604144
140713282360800
140713282369152
1932218591312
140713282360800
1932188604144
1932188603952
True
False
False
True
9 運算符優先級
運算符優先級 | 描述 |
---|---|
** | 指數(最高優先級) |
~ + - | 這裏的是一元運算符 |
* / % // | |
+ - | 二元運算符 |
>> << | 移位運算符 |
& | 位與 |
^ | | 位運算 |
>= <= > < | 比較運算 |
== != | 判等 |
= %= /= //= -= += *= **= | 賦值運算 |
is、is not | 身份運算符 |
in、not in | 成員運算符 |
and or not | 邏輯運算符(優先級最低) |
#建議儘量多加括號,不要太相信自己或別人對優先級的記憶,應儘量將表達式寫得看起來沒有歧義。
a = 1
b = 0
print(a + b << 1) #等同於(a + b) << 1
c = 2
c *= b + a
print(c) #等同於c = c * (b + a)
運算結果:
2
2