05 數字 - 《Python 核心編程》

來源:互聯網
上載者:User

標籤:

?? 數的簡介?? 整型?? 布爾型?? 標準的整型?? 長整型?? 浮點型實數?? 複數?? 操作符?? 內建函數?? 其它數字類型?? 相關模組5.1 數字類型    數字提供了標量貯存和直接存取。    它是不可更改類型,也就是說變更數位值會產生新的對象。        Python 支援多種數字類型:整型、長整型、布爾型、雙精確度浮點型、十進位浮點型和複數。如何建立數值對象並用其賦值    (數字對象) : 建立數值對象和給變數賦值一樣同樣簡單        anInt = 1         aLong = -9999999999999999L        aFloat = 3.1415926535897932384626433832795        aComplex = 1.23+4.56J如何更新數字對象    通過給數字對象(重新)賦值, 您可以“更新”一個數值對象。    數值對象是不可改變對象,實際上你並沒有更新該對象的原始數值,而是產生了一個新的數值對象,並得到它的引用。如何刪除數字對象    按照Python 的法則, 你無法真正刪除一個數值對象, 你僅僅是不再使用它而已。    如果你實際上想刪除一個數值對象的引用, 使用 del 語句。 刪除對象的引用之後, 你就不能再使用這個引用(變數名), 除非你給它賦一個新值。    如果試圖使用一個已經被刪除的對象引用, 會引發NameError 異常。5.2 整型    Python 有幾種整數類型。    布爾類型是只有兩個值的整型。    常規整型是絕大多數現代系統都 能識別的整型。    Python 也有長整數類型。然而,它表示的數值大小遠超過C 語言的長整數 。布爾型    Python 從版本 2.3 開始支援布爾類型。    該類型的取值範圍只有兩個值,也就是布爾值True 和布爾值False。    如果將布爾值放到一個數值上下文環境中(比方將 True 與一個數字相加), True 會被當成整數值 1, 而False則會被當成整數值 0。標準整數類型    Python 的標準整數類型是最通用的數字類型。    在大多數32 位元電腦上,標準整數類型的取 值範圍是-231 到231-1,也就是-2,147,483,648 到 2,147,483,647。    如果在 64 位元電腦上使用 64 位元編譯器編譯Python,那麼在這個系統上的整數將是64 位元。    Python 標準整數類型等價於C 的(有符號)長整型。        整數一般以十進位表示,但是Python 也支援八進位或十六進位來表示整數。        如果八進位整數以數字“0”開始, 十六進位整數則以“0x” 或“0X” 開始。        0101    84    -237    0x80    017    -680    -0X92長整型    關於Python 長整數類型我們必須要提的是, 請不要將它和C 或其它編譯型語言的長整數 類型混淆。    那些語言的長整數典型的取值範圍是32 位或64 位元。    Python 的長整數類型能表達的數值僅僅與你的機器支援的(虛擬)記憶體大小有關, 換句話說, Python 能輕鬆表達很大很大很大的整數。     長整數類型是標準整數類型的超集, 當你的程式需要使用比標準整數類型更大的整數時, 長整數類型就有用武之地了。    在一個整數值後面加個L(大寫或小寫都可以),表示這個整數是長整數。    這個整數可以是十進位,八進位, 或十六進位。    16384L    -0x4E8L    017L    -2147483648l    052144364L     299792458l    0xDECADEDEADBEEFBADFEEDDEAL    -5432101234L    核心風格:用大寫字母 “L”表示長整數    儘管 Python 也支援用小寫字母 L 標記的長整型,但是我們鄭重推薦您僅使用大寫的 “L”,這樣能有效避免數字1 和小寫L 的混淆。    Python 在顯示長整數類型數值的時候總是用大寫“L ”。    目前整型和長整型正在逐漸緩慢的統一,您只有在對長整數調用repr()函數時才有機會看到“L”,如果對長整數對象調用str()函數就看不到 L 。        >>> aLong = 999999999l         >>> aLong         999999999L         >>> print aLong         999999999整型和長整型的統一    必要時整型會悄悄自動轉換為 長整型。    當然,那些要調用C 的人仍然可以繼續使用這兩種整數類型, 因為C 代碼必須區分不同的整數類型。        >>> type(2)         <type ‘int‘>        >>> type(2<<32)         <type ‘long‘>         >>>        >>> 2<<32        8589934592L5.3 雙精確度浮點數    Python 中的浮點數類似C 語言中的double 類型, 是雙精確度浮點數,可以用直接的十進位或科學計數法表示。    每個浮點數佔8 個位元組(64 位元),完全遵守IEEE754 號規範(52M/11E/1S), 其中52 個位元用於表示底,11 個位元用於表示指數, 1個位元表示符號。    實際精度依賴於機器架構和建立Python 解譯器的編譯器。     浮點數值通常都有一個小數點和一個可選的尾碼e(大寫或小寫,表示科學計數法)。    在e和指數之間可以用正(+)或負(-)表示指數的正負(正數的話可以省略符號)。    0.0    -777.    1.6    -5.555567119    96e3 * 1.0    4.3e25    9.384e-23    -2.172818    float(12)    1.000000001     3.1416    4.2E-10    -90.    6.022e23    -1.609E-195.4 複數    一個實數和一個虛數的組合構成一個複數。    一個複數是一對 有序浮點數(x, y)。表示為 x + yj, 其中x 是實數部分,y 是虛數部分。    ?? 虛數不能單獨存在,它們總是和一個值為 0.0 的實數部分一起來構成一個複數。     ?? 複數由實數部分和虛數部分構成     ?? 表示虛數的文法: real+imagj     ?? 實數部分和虛數部分都是浮點數     ?? 虛數部分必須有尾碼j 或J。    64.375+1j    4.23-8.5j    0.23-8.55j    1.23e-045+6.7e+089j     6.23+1.5j    -1.23-875J    0+1j    9.80665-8.31441J    -.0224+0j複數的內建屬性    表 5.1 複數屬性     屬性                            描述     num.real                   該複數的實部    num num.imag        該複數的虛部    num.conjugate()      返回該複數的共軛複數5.5 運算子     數實值型別可進行多種運算。從標準運算子到數值運算子,甚至還有專門的整數運算子。混合模式運算子    Python 使用數字類型強制轉換的方法來解決數字類型不一致的問題。                            數實值型別轉換標準類型運算子    標準運算子都可以用於數實值型別,不同資料類型之間的運算, 在運算之前,Python 內部會將兩個運算元轉換為同一資料類型。算術運算子    單目運算子正號(+)和負號(-),     雙目運算子, +,-,*,/,%,還有 **, // ,分別表示加法,減法, 乘法, 除法, 取餘, 冪運算和整除運算 。    除法         擁有C 背景的程式員一定熟悉傳統除法:            對整數運算元,會執行“地板除”floor,取比商小的最大整數。                例如5 除以2 等於2.5,其中“2”就稱為商的“地板”,即“地板除”的結果。           對浮點運算元會執行真正的除法。    傳統除法         如果是整數除法, 傳統除法會捨去小數部分,返回一個整數(地板除)。        如果運算元之一 是浮點數,則執行真正的除法。            >>> 1 / 2 # perform integer result (floor) # 地板除             0             >>> 1.0 / 2.0 # returns actual quotient#真正除法             0.5    真正的除法         除法運算總是返回真實的商, 不管運算元是整數還是浮點數。            >>> 1 / 2 # returns real quotient             0.5             >>> 1.0 / 2.0 # returns real quotient             0.5    地板除         從Python 2.2 開始, 一個新的運算子 // 已經被增加進來, 以執行地板除: // 除法不管運算元何種數實值型別,總是捨去小數部分,返回數字序列中比真正的商小的最接近的數字。            >>> 1 // 2 # floors result, returns integer # 地板除, 返回整數             0             >>> 1.0 // 2.0 # floors result, returns float # 地板除, 返回浮點數             0.0             >>> -1 // 2 # move left on number line# 返回比 –0.5 小的整數, 也就是 -1             -1    取餘         整數取餘相當容易理解, 浮點數取餘就略雜些。                   商取小於等於精確值的最大整數的乘積之差. 即: x - (math.floor(x/y) * y) 或者         對於複數,取餘的定義類似於浮點數,不同之處在於商僅取其實數部分,即: x - (math.floor((x/y).real) * y)。    冪運算        冪運算操作符和一元操作符之間的優先順序關係比較特別: (??)            冪運算操作符比其左側運算元 的一元操作符優先順序,            比起右側運算元的一元操作符的優先順序,由於這個特性你會在算術運算子表中找到兩個 ** .            註:** 運算子優先順序高於單目運算子            >>> 3 ** 2            9            >>> -3 ** 2 # ** 優先順序高於左側的 -            -9            >>> (-3) ** 2 # 加括弧提高 -的優先順序            9            >>> 4.0 ** -1.0 # ** 優先順序低於右側的 -            0.25    總結 *位元運算符(只適用於整數)    Python 整數支援標準位元運算:取反(~),按位 與(&), 或(|) 及 異或(^) 及左移(<<)和右 移(>>)。    Python 這樣處理位元運算:        ?? 負數會被當成正數的 2 進位補碼處理。        ?? 左移和右移 N 位等同於無溢出檢查的2 的N 次冪運算: 2**N。        ?? 對長整數來說, 位元運算符使用一種經修改的 2 進位補碼形式,使得符號位可以無限的 向左擴充。     取反(~)運算的優先順序與數字單目運算子相同, 是所有位操作符中優先順序最高的一個。    左移和右移運算的優先順序次之,但低於加減法運算。    與, 或, 異或 運算優先順序最低。    5.6 內建函數與工廠函數標準類型函數內建函數    cmp()        比較兩個數的大小    str()         將數字轉換為字串    type()        返回數字對象的類型數字類型函數    轉換工廠函數內建函數        函數 int(), long(), float(),   complex() 和 bool()用來將其它數實值型別轉換為相應的數實值型別。        從Python 1.6 版開始,int() 和 long() 在轉換字串時,接受一個進位參數。如果是數字類型之間的轉換,則這個進位參數不能使用。     功能函數        Python 有五個運算內建函數用於數值運算: abs(), coerce(), divmod(), pow() 和 round()。        abs()            abs()返回給定參數的絕對值。            如果參數是一個複數, 那麼就返回math.sqrt(num.real2 + num.imag2)。            >>> abs(-1)             1             >>> abs(10.)            10.0            >>> abs(1.2-2.1j)            2.41867732449            >>> abs(0.23 - 0.78)            0.55        coerce()            函數coerce()為程式員提供了不依賴Python 解譯器, 而是自訂兩個數實值型別轉換的方法。            函數coerce()僅回一個包含類型轉換完 畢的兩個數值元素的元組。            >>> coerce(1, 2)             (1, 2)             >>>            >>> coerce(1.3, 134L)            (1.3, 134.0)             >>>            >>> coerce(1, 134L)            (1L, 134L)            >>>            >>> coerce(1j, 134L)            (1j, (134+0j))            >>>            >>> coerce(1.23-41j, 134L)            ((1.23-41j), (134+0j))        divmod()            divmod()內建函數把除法和取餘運算結合起來, 返回一個包含商和餘數的元組。            對整數來 說, 它的傳回值就是地板除和取餘操作的結果。            對浮點數來說, 返回的商部分是math.floor(num1/num2)。            對複數來說, 商部分是math.floor((num1/num2).real)。            >>> divmod(10,3)            (3, 1)            >>> divmod(3,10)            (0, 3)            >>> divmod(10,2.5)            (4.0, 0.0)            >>> divmod(2.5,10)            (0.0, 2.5)            >>> divmod(2+1j, 0.5-1j)            (0j, (2+1j))        pow()            函數 pow() 和雙星號 (**) 運算子都可以進行指數運算。            內建函數pow()還接受第三個可選的參數,一個 餘數參數。                如果有這個參數的, pow() 先進行指數運算,然後將運算結果和第三個參數進行取餘運算。                這個特性主要用於密碼運算,並且比 pow(x,y) % z 效能更好, 這是因為這個函數的實作類別似於C 函數 pow(x,y,z)。        round()            內建函數round()用於對浮點數進行四捨五入運算。            它有一個可選的小數位元參數。                如果 不提供小數位參數, 它返回與第一個參數最接近的整數(但仍然是浮點類型)。               小數位元參數 告訴round 函數將結果精確到小數點後指定位元。            round() 函數是按四捨五入的規則進行取整。                也就是round(0.5)得到1, round(-0.5)得到-1。            int(), round(), math.floor()                ?? 函數 int()直接截去小數部分。(傳回值為整數)                ?? 函數 floor()得到最接近原數但小於原數的整數。(傳回值為浮點數)                ?? 函數 round()得到最接近原數的整數。(傳回值為浮點數)    數值運算函數一覽                僅用於整數的函數    進位轉換函式內建函數        Python 提供了兩個內建函數來返回字串表示的8 進位和16 進位整數。        它們分別是 oct() 和 hex()。        它們都接受一個整數(任意進位的)對象,並返回一個對應值的字串對象。        oct()        oct ()接受一個整數(任意進位的)對象,並返回一個8 進位對應值的字串對象。        oct()        hex()接受一個整數(任意進位的)對象,並返回一個16 進位對應值的字串對象。    ASCII 轉換函式內建函數        Python 也提供了ASCII(美國標準資訊交換碼)碼與其序列值之間的轉換函式。        每個字元 對應一個唯一的整數(0-255)。        對所有使用ASCII 表的電腦來說, 這個數值是不變的。        這保證了不同系統之間程式行為的一致性。        chr()             函數chr()接受一個單位元組整數值,返回一個字串, 其值為對應的字元。        ord()             函數ord()則相反,它接受一個字元,返回其對應的整數值。    表5.7 列出了用於整數類型的所有內建函數   5.7 其他數字類型布爾“數”    布爾值“True” 和“False, 是整型的子類,對應與整數的1 和0。    布爾類型的主要概念:        ?? 有兩個永不改變的值 True 或False。         ?? 布爾型是整型的子類,但是不能再被繼承而產生它的子類。         ?? 沒有__nonzero__()方法的對象的預設值是 True。         ?? 對於值為零的任何數字或空集(空列表、空元組和空字典等)在Python 中的布爾值都 是False。         ?? 在數學運算中,Boolean 值的True 和False 分別對應於1 和 0。         ?? 以前返回整數的大部分標準庫函數和內建布爾型函數現在返回布爾型。         ?? True 和False 現在都不是關鍵字,但是在Python 將來的版本中會是。十進位浮點數    十進位數本質上是一種用於數值計算的特 殊類。    你可以通過字串或其它十進位數建立十進位數浮點數。    你必須匯入 decimal 模組以便使用 Decimal 類。        >>> from decimal import Decimal5.8 相關模組            核心模組: random            當你的程式需要隨機數功能時,random 模組就能派上用場。            該模組包含多個偽隨機數發生器,它們均以當前的時間戳記為隨機數種子。            這樣只要載入這個模組就能隨時開始工作。            最常用的函數:                兩個整數參數,返回二者之間的隨機整數                randrange() 它接受和 range() 函數一樣的參數, 隨機返回range([start,]stop[,step])結果的一項                uniform() 幾乎和 randint()一樣,不過它返回的是二者之間的一個浮點數(不包括範圍上限)。                random() 類似 uniform() 只不過下限恒等於0.0,上限恒等於1.0                choice() 隨機返回給定序列的一個元素                               

05 數字 - 《Python 核心編程》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.