Python學習_02_數字和運算

來源:互聯網
上載者:User

標籤:

python具有強大的科學運算功能,python由於支援更加強大的物件導向和動態特性,相比R語言、matlab、mathmatic等傳統的科學計算工具具有非常大的優勢。

Python的數字

python中的數字提供了標量的儲存和直接存取,並且是不可更改的類型,對數位更改實際上是建立了一個新的數字對象,而原來的數字對象當其引用次數為0時,會被記憶體回收機制回收,通過del 關鍵字可以刪除一個對象的引用。

布爾類型:在python2.3之後開始支援,布爾類型只有兩個值:True和False。

整形、長整形:python中的整形大小取決於系統的資料頻寬,如32系統最大支援2^32-1,和C語言中的長整形類似,而python中的長整形則取決於運行機器的虛擬記憶體。python的長整形後面會有L標識,在python2.2之後,python的長整形和整形逐漸統一為一種,並且能夠自動轉換。

浮點型:python中的浮點型類似於C語言中的double,是雙精確度浮點型,每個浮點型佔8個位元組(64位),並且遵守IEEE754號規範:52M/11E/1S,52個位用於表示底,11位用於表示指數,一個位用於表示符號。根據啟動並執行機器不同可能會有所不同。

複數類型:python中內建有複數的類型,一個複數表示為real+imagj的形式,虛數的部分必須有尾碼j或者J,虛數不能單獨存在,他總是和一個值為0.0的實數部分一起構成一個複數。複數的實數和虛數部分都是浮點類型。複數包含兩個內建屬性和一個內建方法:num.real、num.imag、num.conjugate(),其中conjugate()方法返回該複數的共軛複數。

python的操作符

python的操作符工作時,必須保證兩個運算元是同一類型,如果不是同一類型,則會按照以下的邏輯進行轉換:

1.如果有一個運算元是複數,則另外一個運算元也轉換為複數
2.否則,如果一個運算元是浮點型,則另外一個運算元也轉換為浮點型
3.否則,如果一個運算元是長整形,則另外一個運算元也轉換為長整形
4.否則,兩者都是普通整形,無需轉換

python中+、-、*、/、%等和其他語言無異,python中的冪操作符為**,並且添加了新的整除操作: // 。為了科學計算的需要,python的除法也分為好幾種:

1.傳統除法:當兩個運算元都是整數時,執行整數除法,返回一個整形,如果其中之一是浮點數,按照轉換邏輯另外一個運算元也是或者被轉換為浮點數,執行浮點除法。這個規則在python3之後有所改變,在python3中,不論兩個運算元是否都是整形,都將執行真正的除法,而原來的整數除法需要利用地板除操作:// 來完成。

2.真正的除法:在python3之後,/ 操作符將執行真正的除法,而在python2中,如果想要運行真正的除法,則需要通過執行 from __future__import division指令來做到這一點。

3.地板除:操作符 // 執行一個地板除操作,不論運算元是何種類型,都將捨去小數部分,返回數字序列中比真正的商小的最接近的數字。

取餘操作中,如果運算元是浮點型,商取小於等於精確值的最大整形的乘積之差(書上原話,有點拗口,不太理解):

而冪操作等操作符,以及各操作符之間的優先順序,和數學中的習慣都是一致的。

python同時還具有位操作符:~、&、|、^、<<、>>等,用於支援二進位運算。

數值運算的內建函數

1.工廠函數:由於python對類和類型的整合,python中的數實值型別轉換函式就是對應類的工廠函數。當調用float()函數將一個整數轉換為浮點型時,實際上的工作是建立一個float類的實力對象。

2.功能函數:abs()、coerce()、divmod()、pow()、round()等:

abs():返回給定參數的絕對值,如果是複數,則返回距離原點的距離。

coerce():將傳入的參數按照轉換邏輯轉換成統一的類型,並返迴轉換完畢的兩個數值的元組。

divmod():除法和取餘的結合,返回一個元組,包括商和餘數。

pow():pow()函數進行指數運算,並且可以接受第三個參數做取餘操作,pow(x,y,z)的效率會比pow(x,y)%z的效率要高,在密碼運算中這個特性會被用到。

round():按照四捨五入的規則進行取整。python2和python3的規則似乎有點不同:

以上左圖使用python3的idle運行結果,右圖使用python2.7.9在指令碼中執行結果,由於沒有安裝python2的idle,暫時不做細究。

對比round(),int()函數直接截去小數部分,floor()函數則返回最接近原數但是小於原數的整形。

python針對整形提供轉換函式:hex()、oct()、ord()、chr()、unichr()分別返回十六進位整形、八進位整形、給定字元的ASCII碼、給定ASCII碼的字元、給定Unicode碼的字元

Python中的布爾數

python中的布爾數是整形的子類,True和False對應於整形的1和0,python中的布爾型具有以下特點:

1.有兩個永不改變的值:True和False
2.布爾型是整形的子類,但是不能再被繼承而產生他的子類
3.沒有__nonzero__()方法的對象預設是True
4.對於值為零的任何數字或空集:空列表、空元組、空字典等的布爾值都是False
5.可以進行數學運算,且在運算中對應整數1和0

取一個對象的布爾值實際上是執行該對象的__nonzero()__方法,若該對象沒有__nonzero()__方法,如:

class C: pass
c = C()

c是通過工廠函數建立的C類的一個執行個體 ,在C類中並沒有__nonzero()__方法,所以bool(c)返回True值,由於Class類也沒有__nonzero()__方法,所以bool(C)同樣返回True值。

十進位浮點型

在python2.4之前,由於浮點型遵循的IEEE754規範,顯示的時候使用二進位52位表示底,一些簡單的十進位浮點型,比如0.1在二進位浮點型中將顯示為0.10000000001或者0.9999999999等,在python2.4之後,十進位浮點型成為python的特性,但是在做浮點型取餘操作時,任然會出現類似的問題,儘管加入Decimal類也不能解決:

相關模組

針對科學計算的模組NumPy、SciPy包含很多進階的數字科學計算內容,一些其他的數字相關模組,如decimal、array、math/cmath、operator、random等模組對數字計算進行擴充。

random模組中包含多個偽隨機數的發生器:

randint():在兩個整形參數中返回二者之間的隨機整形

randrange():隨機返回range([start,]stop[,step])結果中的一項,如randrange(1,10,2)

uniform():和randint類似,但是返回二者之間的浮點數(開區間)

random():類似於uniform,但是上限恒等於1.0,下限恒等於0.0

choice():隨機返回給定序列的一個元素。

Python學習_02_數字和運算

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.