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