一文帶你搞懂Python數(shù)據(jù)類型之?dāng)?shù)字類型
Hey,大家好呀,我是Go進(jìn)階者。
一、數(shù)字類型
數(shù)字類型用于存儲數(shù)學(xué)意義上的數(shù)值。
數(shù)字類型是不可變類型。所謂的不可變類型,指的是類型的值一旦有不同了,那么它就是一個全新的對象。數(shù)字1和2分別代表兩個不同的對象,對變量重新賦值一個數(shù)字類型,會新建一個數(shù)字對象。
Python的變量和數(shù)據(jù)類型的關(guān)系。
變量只是對某個對象的引用或者說代號、名字、調(diào)用等等,變量本身沒有數(shù)據(jù)類型的概念。類似1,[2, 3, 4],“haha”這一類對象才具有數(shù)據(jù)類型的概念。
例如:
- a = 1 # 創(chuàng)建數(shù)字對象1。
- a = 2 # 創(chuàng)建數(shù)字對象2,并將2賦值給變量a,a不再指向數(shù)字對象1
這里,發(fā)生了變化的是變量a的指向,而不是數(shù)字對象1變成了數(shù)字對象2。初學(xué)者可能會比較迷糊,但不要緊,我們努力去明白它。
二、Python 支持三種不同的數(shù)字類型(整數(shù)、浮點數(shù)和復(fù)數(shù))
1. 整數(shù)(Int)
通常被稱為整型,是正或負(fù)整數(shù),不帶小數(shù)點。Python3的整型可以當(dāng)作Long類型(更長的整型)使用,所以 Python3沒有Python2的Long類型。
例如:1,100,-8080,0,等等。
表示數(shù)字的時候,有時我們還會用八進(jìn)制或十六進(jìn)制來表示:
十六進(jìn)制用0x前綴和0-9,a-f表示,例如:0xff00,0xa5b4c3d2。
八進(jìn)制用0o前綴和0-7表示,例如0o12。
Python的整數(shù)長度為32位,并且通常是連續(xù)分配內(nèi)存空間的。
什么是空間地址?
空間地址(address space)表示任何一個計算機實體所占用的內(nèi)存大小。比如外設(shè)、文件、服務(wù)器或者一個網(wǎng)絡(luò)計算機。地址空間包括物理空間以及虛擬空間。
例 :
- print(id(-2))
- print(id(-1))
- print(id(0))
- print(id(1))
- print(id(2)
從上面的空間地址看,地址之間正好差32。為什么會這樣?
因為Python在初始化環(huán)境的時候就在內(nèi)存里自動劃分了一塊空間,專門用于整數(shù)對象的存取。當(dāng)然,這塊空間也不是無限大小的,能保存的整數(shù)是有限的,所以你會看到id(0)和id(10000)之間的地址差別很大。
- >>> id(0)
- 1456976928
- >>> id(10000)
- 45818192
小整數(shù)對象池:
Python初始化的時候會自動建立一個小整數(shù)對象池,方便我們調(diào)用,避免后期重復(fù)生成!
這是一個包含262個指向整數(shù)對象的指針數(shù)組,范圍是-5到256。也就是說比如整數(shù)10,即使我們在程序里沒有創(chuàng)建它,其實在Python后臺已經(jīng)悄悄為我們創(chuàng)建了。
驗證一下小整數(shù)對象池的存在
在程序運行時,包括Python后臺自己的運行環(huán)境中,會頻繁使用這一范圍內(nèi)的整數(shù),如果每需要一個,你就創(chuàng)建一個,那么無疑會增加很多開銷。創(chuàng)建一個一直存在,永不銷毀,隨用隨拿的小整數(shù)對象池,無疑是個比較實惠的做法。
- print(id(-6))
- print(id(-5))
- print(id(-4))
- print(id(255))
- print(id(256))
- print(id(257))
從id(-6)和id(257)的地址,我們能看出小整數(shù)對象池的范圍,正好是-5到256。
除了小整數(shù)對象池,Python還有整數(shù)緩沖區(qū)的概念,也就是剛被刪除的整數(shù),不會被真正立刻刪除回收,而是在后臺緩沖一段時間,等待下一次的可能調(diào)用。
- >>> a = 1000000
- >>> id(a)
- 45818160
- >>> del a # 刪除變量a
- >>> b = 1000000
- >>> id(b)
- 45818160
給變量a賦值了整數(shù)1000000,看了一下它的內(nèi)存地址。然后我把a刪了,又創(chuàng)建個新變量b,依然賦值為1000000,再次看下b的內(nèi)存地址,和以前a存在的是一樣的。
del是Python的刪除關(guān)鍵字,可以刪除變量、函數(shù)、類等等。
這一段內(nèi)容,可能感覺沒什么大用,但它對于理解Python的運行機制有很大幫助。
2. 浮點數(shù)(float)
浮點數(shù)也就是小數(shù),如1.23,3.14,-9.01,等等。但是對于很大或很小的浮點數(shù),一般用科學(xué)計數(shù)法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。
3. 復(fù)數(shù)( (complex))
復(fù)數(shù)由實數(shù)部分和虛數(shù)部分構(gòu)成,可以用a + bj,或者complex(a,b)表示,復(fù)數(shù)的實部a和虛部b都是浮點型。關(guān)于復(fù)數(shù),不做科學(xué)計算或其它特殊需要,通常很難遇到。
數(shù)字類型轉(zhuǎn)換:
有時候,我們需要對數(shù)字的類型進(jìn)行轉(zhuǎn)換。Python為我們提供了方便的內(nèi)置的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)。
int(x):將x轉(zhuǎn)換為一個整數(shù)。如果x是個浮點數(shù),則截取小數(shù)部分。
float(x) :將x轉(zhuǎn)換到一個浮點數(shù)。
complex(x) :將x轉(zhuǎn)換到一個復(fù)數(shù),實數(shù)部分為 x,虛數(shù)部分為 0。
complex(x, y):將 x 和 y 轉(zhuǎn)換到一個復(fù)數(shù),實數(shù)部分為 x,虛數(shù)部分為 y。
轉(zhuǎn)換過程中如果出現(xiàn)無法轉(zhuǎn)換的對象,則會拋出異常,比如int("haha"),你說我把字符串“haha”轉(zhuǎn)換為哪個整數(shù)才對?
- a = 10.53
- b = 23
- print(int(a))
- print(float(a))
- print(complex(a))
- print(complex(a, b))
三、math庫(數(shù)學(xué)計算)
科學(xué)計算需要導(dǎo)入math這個庫,它包含了絕大多數(shù)我們可能需要的科學(xué)計算函數(shù),一般常用的函數(shù)主要包括abs()、exp()、fabs()、max()、min()等,這里就不再贅述了,感興趣的小伙伴可以自行百度下。
下面是兩個常用數(shù)學(xué)常量:
下面是一些應(yīng)用展示,注意最后的角度調(diào)用方式:
- import math
- print(math.log(2))
- print(math.cos(30))
- print(math.cos(60))
- print(math.sin(30))
- print(math.sin(math.degrees(30)))
- print(math.sin(math.radians(30)))
四、總結(jié)
本文詳細(xì)的講解了Python基礎(chǔ) ( 數(shù)字類型 )。介紹了有關(guān)Python 支持三種不同的數(shù)字類型。以及在實際操作中會遇到的問題,提供了解決方案。
用豐富的案例幫助大家更好理解,使用Python編程語言,方便大家更好理解,希望對大家的學(xué)習(xí)有幫助。