數(shù)字類型是不可變類型,。所謂的不可變類型,,指的是類型的值一旦有不同了,那么它就是一個(gè)全新的對象,。數(shù)字1和2分別代表兩個(gè)不同的對象,,對變量重新賦值一個(gè)數(shù)字類型,會新建一個(gè)數(shù)字對象,。
還是要強(qiáng)調(diào)一下Python的變量和數(shù)據(jù)類型的關(guān)系,,變量只是對某個(gè)對象的引用或者說代號、名字,、調(diào)用等等,,變量本身沒有數(shù)據(jù)類型的概念 ,。只有1,[1,,2],,"hello"這一類對象才具有數(shù)據(jù)類型的概念。
Python 支持三種不同的數(shù)字類型,,整數(shù),、浮點(diǎn)數(shù)和復(fù)數(shù)。
整數(shù)
通常被稱為整型,,數(shù)值為正或者負(fù),,不帶小數(shù)點(diǎn)。python 3的整型可以當(dāng)做Long類型使用,,所以python 3 沒有python 2的Long類型,。
表示數(shù)字的時(shí)候,有時(shí)我們還會用八進(jìn)制或十六進(jìn)制來表示:
十六進(jìn)制用0x前綴和0-9,,a-f表示,,例如:0xff00
八進(jìn)制用0o前綴和0-7表示,例如0o45
python的整數(shù)長度為16,,32位,,并且通常是連續(xù)分配內(nèi)存空間的。
從上面的空間地址看,,地址之間正好差16,,32。
小整數(shù)對象池
python初始化的時(shí)候會自動(dòng)建立一個(gè)小整數(shù)對象池,,方便我們調(diào)用,,避免后期重復(fù)生成!這是一個(gè)包含262個(gè)指向整數(shù)對象的指針數(shù)組,,范圍是-5到256,。也就是說比如整數(shù)10,即使我們在程序里沒有創(chuàng)建它,,其實(shí)在Python后臺已經(jīng)悄悄為我們創(chuàng)建了,。
為什么要這樣呢?我們都知道,,在程序運(yùn)行時(shí),,包括Python后臺自己的運(yùn)行環(huán)境中,會頻繁使用這一范圍內(nèi)的整數(shù),,如果每需要一個(gè),,你就創(chuàng)建一個(gè),那么無疑會增加很多開銷,。創(chuàng)建一個(gè)一直存在,,永不銷毀,,隨用隨拿的小整數(shù)對象池,無疑是個(gè)比較實(shí)惠的做法,。
從id(-6)和id(257)的地址,,我們能看出小整數(shù)對象池的范圍,正好是-5到256,。
除了小整數(shù)對象池,,Python還有整數(shù)緩沖區(qū)的概念,也就是剛被刪除的整數(shù),,不會被真正立刻刪除回收,,而是在后臺緩沖一段時(shí)間,等待下一次的可能調(diào)用,。
上面,我給變量a賦值了整數(shù)100,,看了一下它的內(nèi)存地址,。然后我把a(bǔ)刪了,又創(chuàng)建個(gè)新變量b,,依然賦值為100,,再次看下b的內(nèi)存地址,和以前a存在的是一樣的,。
浮點(diǎn)數(shù)
浮點(diǎn)數(shù)也就是小數(shù),,如1.23,3.14,,-9.01,,等等。但是對于很大或很小的浮點(diǎn)數(shù),,一般用科學(xué)計(jì)數(shù)法表示,,把10用e替代,1.23x10^9就是1.23e9,,或者12.3e8,,0.000012可以寫成1.2e-5,等等,。
復(fù)數(shù)(complex)
復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成,,可以用a + bj,或者complex(a,,b)表示,,復(fù)數(shù)的實(shí)部a和虛部b都是浮點(diǎn)。
數(shù)字類型轉(zhuǎn)換
在某些特定的情況下,,我們需要對數(shù)字的類型進(jìn)行轉(zhuǎn)換,。python為我們提供了內(nèi)置的數(shù)據(jù)類型轉(zhuǎn)換函數(shù),。
轉(zhuǎn)換過程中如果出現(xiàn)無法轉(zhuǎn)換的對象,則會拋出異常,,比如int("haha")
數(shù)學(xué)計(jì)算
對于數(shù)學(xué)計(jì)算,,除了前面提到過的簡單的加減乘除等等,更多的科學(xué)計(jì)算需要導(dǎo)入math這個(gè)庫,,它包含了絕大多數(shù)我們可能需要的科學(xué)計(jì)算函數(shù),,如下表
例子