天天看點

Python基礎文法_運算符詳解前言 軟體環境 身份運算符 算術運算符比較運算符 位移運算符 自變運算符 位運算符 邏輯運算符 成員關系運算符Python真值表 最後

作業系統 

ubuntukylin 14.04

軟體 

python 2.7.6

ipython 4.0.0

身份運算符用來判斷兩個變量的引用對象是否指向同一個記憶體對象,即id(varibale1) ?= id(variable2)。 

is:判斷兩個辨別符是不是引用自一個對象 

is not:判斷兩個辨別符是不是引用自不同對象 

需要注意的是: is 和 == 的意義并不相同。

概括性而言,is 是判斷兩個變量是否引用同一個對象,而 == 則是判斷兩個變量引用的對象的值是否一緻。要很好的了解兩者間的差別需要從python對象的三要素說起。 

python對象的三要素:id、type、value 

id:是對象的唯一辨別,是對象在記憶體中的存儲位址。 

type:是對象的資料類型 

value:是對象的值,是對象在記憶體中存放的資料。 

其中is的判斷依據是對象的id,== 的判斷依據是對象value,例如:

上述例子,name2是name1調用copy( )函數後傳回的一個新的對象,是以兩者的id( )不相等,而兩個變量在記憶體和中的vale卻是相等的。

operator

description

+\-

加\減,其中’+’可以重載為連接配接符,連接配接兩個字元或字元串

*\**

乘\求平,其中*可以重載為重複

/\%\//

除\求餘\取整除,其中%可以重載為格式化,取整除傳回商的整數部分

**注:**python除法需要注意的方面(python 2.x版本,3.x版本不存在此問題) 

1.python中int型的數值相除,隻能得到int型不會傳回小數。若傳回值需要精确到小數時,有兩種方法。 

方法一:除數或被除數需要有一者為float型數值。

方法二:import未來支援的語言特征division(精确除法) 

python的’/’除法預設使用截斷除(truncating division),導入division子產品後,python才會預設使用精确除法。當導入了精确除後,若想再使用截斷除,可以使用取整除’//’,同時也被成為地闆除。

随便介紹兩個内建函數round(number[, ndigits])、divmod(x, y) 

round(x[,n]):給定一個浮點數x,并按照指定精度傳回一個浮點數對象,官方文檔如下:

例子:

除了使用這種方法擷取指定精度的浮點數外,還可以使用%格式化來輸出指定精度的浮雕數。

%格式化可以非常靈活的得到滿足需求的輸出資料的格式,以後我們會繼續了解。 

divmod(x, y):計算x,y的取整除和餘數,并以元組類型傳回。官方文檔:

>

大于

<

小于

>=

大于等于

<=

小于等于

==

等于,比較兩個對象的value是否相等,相等為true

!=

不等于,比較兩個對象的value是否不相等,不相等為true

<>

不等于,同!= 運算符

位移運算符是非常有效率的計算方法之一,在對數學運算和對程式執行效率要求高的程式中推薦使用。除了位移運算符之外,python的按位運算符也是非常有效率的一種資料處理方法,之後會詳細的介紹。

<<

a << n ⇒ a*(2**n)

>>

a >> n ⇒ a/(2**n)

自變運算符可以減少一定的代碼量,更重要的是,使用自變運算符可以加快python程式在記憶體中的執行效率。 

值得注意的是:python出于避免文法歧義的初衷,在python文法中并沒有自增 i++ 或者 ++i的文法, ++i 隻作用于數學運算操作符,如:

+=

a+=b ⇒ a=a+b

-=

a-=b ⇒ a=a-b

*=

a*=b ⇒ a=a*b

/=

a/=b ⇒ a=a/b

%=

a%=b ⇒ a=a%b

**=

a**=b ⇒ a=a**b

//=

a//=b ⇒ a=a//b

順便來比較一下 i = i+1 、i += 1 、i++ 三者間執行效率的高低(對一般程式設計語言而言)。 

最低 i = i + 1 

(1). 讀取右i的位址 

(2). i+1 

(3). 讀取左i的位址 

(4). 将右i+1傳遞給左i,編譯器認為左右兩個i是不一緻的。 

其次 i += 1 

(1). 讀取左i的位址 

(3). 将i+1傳遞給i自身,編譯器會認為隻有同一個i 

最高 i++ 

(1). 讀取i的位址 

(2). 自增1 

注意:在考慮到提升程式運作效率的同時,也要注意在使用i += 1的時候可以會莫名其妙的出現文法錯誤,這種時候可以考慮是否為資料類型的類型隐式轉換錯誤。 

以上的比較隻是針對一般的程式設計語言而言,在python中因為存在可變對象和非可變對象,而且不存在i++自增語言。但是使用自變運算符,的确可以有效的減少代碼量和使程式更加簡潔。

x | y

按位或(有1則1)

x & y

按位與(有0 則0)

x ^ y

位異或(不同為1,相同為0)

~x

取反

在python中 | 、& 等運算符的意義不在于處理邏輯關系,而是二進制資料的位運算,數字以二進制形式的補碼存儲和計算,以原碼結果來顯示。若數字為正值,他的補碼就是原碼本身。若數字為負值,則他的補碼為源碼減一再按位取反。兩個數字的計算本質是兩個二進制補碼的計算。 

數字計算的實作原理: 

1的原碼:0000 0001 , 補碼: 0000 0001 (二進制的首個數字代表符号,不可以改變) 

-1的原碼:1000 0001 , 補碼:1111 1111

即: 

1111 1111 

0000 0001 

————— 

其結果原碼為 0000 0001(正數的補碼就是原碼本身)

其結果原碼為1000 0001(負數的原碼為補碼減一再按位取反,首個數字代表符号不可以改變) 

是以,從數字計算的底層實作可以看出。位移運算符是計算效率非常高的一種計算方法,尤其可以避免類似執行乘法時,所帶來的非常繁複的操作和實作過程。

and

邏輯與

or

邏輯或

not

邏輯非

成員運算符能夠判斷一個指定對象是否是作為一個容器中的元素,由此來判斷兩個對象間的關系。 

容器:包含了其他對象的引用的資料類型。

in

當一個對象存在一個容器中時為ture

not in

當一個對象不在一個容器中時為true

object

constant value

“”

false

“str”

true

1

()空元組

[]空清單

{}空字典

none

運算符在程式中一直都充當着非常重要的角色,可能是程式設計的過程中并不會完全用的上,但是建立一個由自己編寫起來的運算符文檔,在往後的程式編寫中會變得非常的友善。

jmilk

轉自:http://blog.csdn.net/jmilk/article/details/48666475