天天看點

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

作者:猿人曰

在上一章中我們講了算術運算符、比較運算符、指派運算符、邏輯運算符。本章我們來講:位運算符、成員運算符、身份運算符。

位運算符

位運算符是把數字變成二進制,一位一位的去進行運算。

 位運算符的使用 

以下假設 a = 77,b = 11

77 的二進制為:01001101

11 的二進制為:00001011

運算符 描述 使用
&

按位與運算符

1 & 1 = 1 

1 & 0 = 0

a & b = 9

(00001001)

|

按位或運算符

1 | 1 = 1 

1 | 0 = 1

0 | 0 = 1

a | b = 79

(01001111)

^

按位異或運算符

1 ^ 1 = 0

0 ^ 0 = 1

1 ^ 0 = 1

a ^ b = 70

(01000110)

~

按位取反,0 變 1 , 1 變 0

可以了解為~x = - x - 1

~ a = - 78
<< 二進制各位全部左移若幹位 "<

6 << 2 = 24

(00011000)

6 的二進制 00000110

>> 二進制各位全部右移若幹位 ">>" 右邊的數為指定移動的位數,左邊丢棄,右邊補0

6 >> 2 = 1

(00000001)

6 的二進制 00000110

成員運算符

Python 還支援成員運算符,其中包括字元串、清單、元組

 成員運算符的使用 

以下假設 a = 1,b = 6,c = [1, 2, 3]

運算符 描述 使用
in 判斷某一進制素是否在指定序列中,在傳回 True,不在傳回 False。

a in c , 傳回 True

b in c , 傳回 False

not in 判斷某一進制素是否在指定序列中,在傳回 False,不在傳回 True。

a not in c , 傳回 False

b not in c , 傳回 True

身份運算符

身份運算符用來比較兩個對象的存儲單元

 身份運算符的使用 

運算符 描述 使用
is is 是判斷兩個辨別符是不是引用同一個對象 x is y, 類似 id(x) == id(y) , 如果引用的是同一個對象則傳回 True,否則傳回 False
is not is not 是判斷兩個辨別符是不是引用自不同對象 x is not y , 類似 id(a) != id(b)。如果引用的不是同一個對象則傳回結果 True,否則傳回 False。

id ( ) 函數是用來檢視對象的記憶體位址

 is 與 == 的差別 

is 用來判斷兩個變量所引用指向的對象是否為一個

== 用來判斷兩個引用變量的值是否相等

具體 is 、is not、== 的使用下見圖:

(1.1)兩個清單(is)比較

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

(1.2)兩個清單(is not)比較

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

(1.3)兩個清單(==)比較

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

(2.1)兩個整數(is)比較

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

(2.2)兩個整數(is not)比較

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

(2.3)兩個整數(==)比較

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

由上面的圖中可以看出一些問題,為什麼 a 與 b 長得一模一樣,清單的 id 卻不相同,整數列印的 id 就相同?

因為在python中所有數字、字元串、list等,建立時會配置設定一個記憶體空間,我們的變量通過引用指向的方式來使用他們。

比如上圖 a = 10 和 b = 10,他們輸出的 id 一樣,表示 a 和 b 都指向相同的記憶體位址,就是說引用了同一個不可變對象。但是 a = [1, 2, 3] 和 b = [1, 2, 3] ,他們輸出的 id 不一樣,a 和 b 指向的是不同的記憶體位址,就是說引用了不同的可變對象,并且各可變對象是互相獨立,在記憶體中也有獨立的記憶體位址。

 可變類型與不可變類型 

 可變類型 

可變類型有:清單(list)、字典(dict)、集合(set)

了解:可變類型是指對象的記憶體值可以被改變。當引用改變後,其實是所指的值直接發生改變,并沒有複制行為,也沒有開辟新的記憶體位址,通俗點說就是自我改變。

 不可變類型 

不可變類型有:整型(int)、元組(tuple)、字元串(str)、布爾(bool)

了解:不可變類型是指對象的記憶體值不可被改變。在 Python 中變量以引用的方式指向對象,如果變量引用了不可變對象,當該變量改變時,由于其所指對象的值不可被改變,相當于把原來的值複制一份後再改變,這時會開辟一個新的位址,變量也将指向這個新的位址,即變量引用了新的對象。

Python運算符優先級

以下運算順序由高到低:

運算符 介紹
( ) 小括号
** 指數
~ 按位取反
*、/、//、% 乘、除、取整、取餘
+、- 加、減
<> 位移
& 按位與運算符
^ 按位異或運算符
| 按位或運算符
>、>=、 比較運算符
==、!= 等于、不等于
is、is not‍ is 運算符
in、not in  in 運算符
not‍
and
or

END

java 位運算取8位_Python入門(9)運算符 — 位運算符、成員運算符、身份運算符...

繼續閱讀