python3基礎篇(三)——運算符

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 判斷是否不是引用自同一個對象

  說白了就是比較內存地址是否相同。==用於比較變量內存中的值是否用,isis 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章