運算符:運算符用于執行程式代碼運算,會針對一個以上操作數項目來進行運算
python支援的運算符:
- 算術運算符
-
兩個對象相加或者相同資料類型的拼接 +
1+2+False+True
print(“234”+“123”)
print([1,2,3,45]+[1,“234”,True,3.14])
》》》
4
“234123”
[1, 2, 3, 45, 1, ‘234’, True, 3.14]
-
一個數減去另一個數 -
1-True
》》》
-
兩個數相乘或是傳回一個被重複若幹次的字元串*
5*False
print(‘asjkfdhsk我’*2)
》》》
asjkfdhsk我asjkfdhsk我
-
除法/
3.556/5522
》》》
0.0006439695762404926
5/False
》》》
Traceback (most recent call last):
File “<pyshell#1>”, line 1, in
ZeroDivisionError: division by zero
6/3
》》》
2.0
-
傳回除法的餘數%
[5%2,‘widjj’]
》》》
[1, ‘widjj’]
-
傳回x的y次幂**
2**6
》》》
64
-
取整除 - 向下取接近除數的整數//
9//2
-9//2
》》》
4
-5
2.比較運算符
- 等于 - 比較對象是否相等==
- 不等于 - 比較兩個對象是否不相等!=
- 大于 - 傳回x是否大于y >
- 小于 - 傳回x是否小于y <
- 大于等于 - 傳回x是否大于等于y >=
- 小于等于 - 傳回x是否小于等于y <=
3.指派運算符
****= 簡單的指派運算符 c = a + b 将 a + b 的運算結果指派為 c
+= 加法指派運算符 c += a 等效于 c = c + a
-= 減法指派運算符 c -= a 等效于 c = c - a
*= 乘法指派運算符 c *= a 等效于 c = c * a
/= 除法指派運算符 c /= a 等效于 c = c / a
%= 取模指派運算符 c %= a 等效于 c = c % a
**= 幂指派運算符 c = a 等效于 c = c ** a
//= 取整除指派運算符 c //= a 等效于 c = c // a
4.位運算符
按位運算符是把數字看作二進制來進行計算的
a=60#0011 1100
b=13#0000 1101
print(a&b)
print(a|b)
print(a^b)
print(~a)
print(a<<2)
print(a>>2)
12#0000 1100
61#0011 1101
49#0011 0001
-61#1100 0011
240#1111 0000
15#0000 1111
5.邏輯運算符
a=5
b=7
if (a and b):
print("a和b都為True")
else:
print("a和b至少有一個為假")
a=0
if (a and b):
print("a和b都為True")
else:
print("a和b至少有一個為假")在這裡插入代碼片
a和b都為True
a和b至少有一個為假
**python 中的 and 從左到右計算表達式,若所有值均為真,則傳回最後一個值,若存在假,傳回第一個假值;
or 也是從左到有計算表達式,傳回第一個為真的值;如果都為真或假,則傳回最後一個值
在Python中,None、任何數值類型中的0、空字元串“”、空元組()、空清單[]、空字典{}都被當作False,還有自定義類型,如果實作了 __ nonzero __ () 或 __ len __ () 方法且方法傳回 0 或False,則其執行個體也被當作False,其他對象均為True
print(1 and 0)
print(1 and True)
print(True and 1)
print(False and 0)
print(0 and False)
print(False or 0)
print(0 or False)
print(-1 or 0)
print(0 or 1)
print(not 0)
print(not '')
print(not 1)
# and:前面為假(0 或者 False)則表達式為假,否則表達式為後面的值;
# or:前面為真(非 0 或者非 False)則表達式為前面的值,否則表達式為後面的值;
0
True
1
False
0
0
False
-1
1
True
True
False
a=0
b=7
if not a:
print("a和b都為True")
else:
print("a和b至少有一個為假")
if not b:
print("a和b都為True")
else:
print("a和b至少有一個為假")
a和b都為True
a和b至少有一個為假
print(1 and 2 or not 1)
print(1 and not 2 or False)
print(not True and False or False)
print(not False or True and False)
print(True or False and not False)
print(False or not False and 0)
#優先級:not>and>or
2
False
False
True
True
0
6.成員運算符
a='a'
b='ab'
print(a in b)
print(a not in b)
c=[a,b]
print('a' in c)
print(a not in c)
True
False
True
False
7.身份運算符
a=5
b=6
c=5
print(id(a))
print(id(b))
print(id(c))
print(a is b)
print(a is c)
print(b is not c)
a=a+1
print(id(a))#變得記憶體位址與b一樣了
print(a is not b)
#python 中,變量是以内容為基準而不是像 c 中以變量名為基準,是以隻要你的數字内容是5,
# 不管你起什麼名字,這個變量的 ID 是相同的,同時也就說明了 python 中一個變量可以以多個名稱通路
1468033920
1468033952
1468033920
False
True
True
1468033952
False
上述所說的在腳本式程式設計環境類似pycharm中沒有問題。但是在互動式環境中,編譯器會有一個小整數池的概念,會把(-5,256)間的數預先建立好,而當a和b超過這個範圍的時候,兩個變量就會指向不同的對象了,是以位址也會不一樣
>>> a=1000
>>> b=1000
>>> id(a)
2138803203856
>>> id(b)
2138803203824
is 判斷兩個對象是否為同一對象, 是通過 id 來判斷的; 當兩個基本類型資料(或元組)内容相同時, id 會相同, 但并不代表 a 會随 b 的改變而改變。
a=10000
b=10000
list1=['加油','Mr Xiao','0527',a]
list2=['Fighting','肖先生','0527',b]
print(list1[3] is list2[3])
list1=('加油','Mr Xiao','0527',a)
list2=('Fighting','肖先生','0527',b)
print(list1[3] is list2[3])
list1={10:'加油',11:'Mr Xiao',12:'0527',13:a}
list2={10:'Fighting',11:'肖先生',12:'0527',13:b}
print(list1[13] is list2[13])
True
True
True
8.運算符優先級
a=60#0011 1100
b=13#0000 1101
print(~a-4+1)
print(a|b&a^b)
-64
61