天天看點

python的運算符

算數運算符主要用作于計算機的算數運算

符号

作用

+

加法、字元串的拼接

-

減法

*

乘法、字元串的重複

/

除法

//

地闆除(除法)

%

取餘(除法)

**

幂運算

比較兩個值是否相同,結果隻會是布爾值,條件成立傳回True,反之False;

可以比較任何類型的資料;

python沒有向其它語言中一樣區分等于和絕對等于的概念,等于就是絕對等于,是區分資料類型的;

>

大于

<

小于

\>=

大于等于

<=

小于等于

==

等于

!=

不等于

給某個資料賦予新的值

除了<code>=</code>之外的其它指派運算符,都是在算數運算符的基礎上添加了<code>=</code>,使用的方法則和原有的意義基本相同,是将算數出來的結果替換原有的資料

python沒有其它語言的自增和自減概念;

=

指派

+=

運算替換

-=

*=

/=

//=

%=

**=

用于針對容器型資料,查詢某個資料是否是容器當中的元素;傳回布爾值,條件成立傳回True,反之False;

in

查詢的元素是否在容器當中

not in

查詢的元素是否不在在容器當中

字元串

字典

檢測兩個資料在記憶體當中是否是同一個值,傳回布爾值

is

是同一位址

is not

不是同一位址

整型:-5 ~~ 正無窮的範圍内的數記憶體位址相同

浮點型:非負數的記憶體的位址相同

布爾型:同值記憶體位址相同

複數:實數+虛數的的格式永不相同

容器類型:隻有字元串和空元組的情況相同

判斷運算符兩邊的布爾值,傳回布爾值

特點

and

邏輯與:兩遍的資料都為真,傳回True

全真為真,一假則假

or

邏輯或:兩遍的資料有一個為真,傳回True

全假為假,全假為假

not

邏輯非:将後面的資料的邏輯值反轉

真為假,假為真

and——邏輯與

運算符兩遍的值都為真,傳回真,其餘情況傳回假

or——邏輯與

運算符兩遍的值都為假,傳回假,其餘情況傳回真

not——邏輯非

将左側的進行反轉,真的轉為假,假的轉為真

布爾值為假的十種情況還記得嗎???

0 0.0 0j False "" [] () set() {} None
True or 表達式 False and 表達式

在邏輯表達式中,or的特點是一真則真,是以True or首先是發現前面已經有了真,是以or就無需再檢查後面的資料是真是假,直接傳回前面的真,導緻不在執行後面的代碼,造成邏輯短路。

False and同理,and一假則假,是以當and前面出現假的時候,就不在需要知道後面的資料是真是假,直接傳回假,造成邏輯短路。

() &gt; not &gt; and &gt; or

和數學的運算一樣,要先運算括号内的資料。

在多邏輯運算符的算數中,按照優先級計算。

位運算符用二進制數補碼進行運算

&amp;

按位與

|

按位或

~

按位非

^

按位異或

&lt;&lt;

左移位

\&gt;&gt;

右移位

将數字的補碼中,同位數都為真的保留下來,組合成新數字

19的補碼: 0000 ... 10011 15的補碼: 0000 ... 01111 同位數都為真的保留下來: 0000 ... 00011 =&gt; 3

将數字的補碼中,同位數隻要有一個為真就保留下來,組合成新數字

19的補碼: 0000 ... 10011 15的補碼: 0000 ... 01111 同位數一個為真的保留下來: 0000 ... 11111 =&gt; 31

将數字的補碼中,同位數相同傳回假,不同傳回真,組合成新數字

19的補碼: 0000 ... 10011 15的補碼: 0000 ... 01111 同位數不同的傳回真: 0000 ... 11100 =&gt; 28

整個數字向左移位,原位補0,組合成新數字

左移位相當于做乘法,左移n位,就相當于乘 2 的n次幂

19的補碼:0001 0011 左移1位: 0010 0110 =&gt; 38

整個數字向右移位,原位補0,溢出消失,組合成新數字

右移位相當于做除法,左移n位,就相當于除以 2 的n次幂

19的補碼:0001 0011 右移1位: 0000 1001 =&gt; 9

按位取反,包括符号位。

公式:-(n + 1)

十進制數:19 原碼: 0001 0011 反碼: 0001 0011 補碼: 0001 0011 (先得到一個數的補碼) 按位非:1110 1100 (按位非,包括符号位在内的全部取反) 補碼: 1110 1100 (結果還是補碼) 取反: 1001 0011 原碼: 1001 0100 (根據這個補碼還原的原碼) 十進制數:-20 -(19 + 1) = -20

算術運算符: + - * / // % **

比較運算符: &gt; &lt; &gt;= &lt;= == !=

指派運算符: = += -= *= /= //= %= **=

成員運算符: in 、 not in

身份運算符: is 、 is not

邏輯運算符: and 、 or 、 not

位運算符: &amp; | ^ ~ &lt;&lt; &gt;&gt;

權重從小之下

當多種運算符混合使用:

算數 &gt; 位 &gt; 比較 &gt; 身份 &gt; 成員 &gt; 邏輯 &gt; 指派

一進制運算符 &gt; 二進制運算符

一進制運算符:同一時間隻操作一個值,比如按位非(~19)、邏輯非(not True)

二進制運算符:同一時間操作兩個值,多數是這樣的,比如幂運算(2 ** 3)、邏輯與(True and False)

算數運算符:

幂運算 &gt; 乘除 &gt; 加減

位運算符:

按位非 &gt; 左右移 &gt; 按位與 &gt; 按位異或 &gt; 按位或

邏輯運算符:

() &gt; not &gt; and &gt; or

指派運算符:

= 最小

這是我的一點心得:

寫出機器看得懂的代碼是行業門榄,品質高的代碼是行業的水準,讓人看得懂的代碼是行業的标杆。一個優秀的程式設計工作者寫的代碼會看起來更加的直覺。

在編寫複雜的運算式的時候要注意盡量的讓代碼直覺,比如可以使用括号。下面的兩行運算式的結果一樣,但是給人的截然不同。