數字提供了標量儲存和直接訪問,是不可更改類型,每次變更數值會產生新的對象。Python支持多種數字類型,包括整型、長整型、布爾型、雙精度浮點、十進制浮點和復數。
在Python中,變量并不是一個盒子,而是一個指針指向裝變量值的盒子。對于不可更改類型來說,沒辦法改變盒子的內容,但是可以指向一個新的盒子。
我們沒辦法刪除一個數值對象,僅可以不再使用它。內存管理是由Python自己接管的??梢允褂胐el語句來刪除引用,但那樣的話,這個引用(也就是變量)就不能使用了,除非給它一個新值
>>> anint = 1>>> del anint>>> anintTraceback (most recent call last):File "<pyshell#6>", line 1, in <module>anintNameError: name 'anint' is not defined
數值類型
布爾型
取值范圍只有兩個值,True和False。
實際上是整型的子類,但不能再被繼承而生成它的子類。數學運算中,True和False分別對應1和0
由于在Python2中,True和False都不是關鍵字,所以會出現以下的代碼情況
>>> True, False = False, True>>> PRint TrueFalse>>> print FalseTrue
這只是個示例,在實際編程中,不管出現什么情況都不應該這么干。
整數類型
Python的標準整數類型是通用的數字類型,在32位機上范圍是32位,64位機則是64位。書上說標準整型等價于C的(有符號)長整型,但就我的學習,因為C的標準變更,應該是等價于C的整型。
而Python的長整型,是一個非常大范圍的數,取值范圍僅僅與機器支持的內存大小有關。書寫時用大寫字母L作為后綴標注長整型。
這里可以用作str()和repr()區別的一個示例
>>> along = 9999999999L>>> str(along)'9999999999'>>> repr(along)'9999999999L'
可以看到之前提到的str()對人更友好repr()對Python更友好。
而在Python2.4以后,整型和長整型開始了融合,當整型出現溢出時,就會自動轉換為長整型,所以不是特殊的情況下,幾乎感覺不到長整型的存在。
Python的浮點型類似于C的double。可以直接用十進制或者科學計數法表示。
Python支持復數類型。虛數部分有后綴j或J。寫法是real+imagj
復數是有數值屬性的,可以用num.real來調用實部,用num.imag來調用虛部,用num.conjugate()來調用共軛復數。
運算符
混合模式運算符
Python是支持混合模式運算符的,可以將不同類型的數值直接相加。當兩個整數相加時,+ 是整數加法,當兩個浮點數相加時 + 是浮點數加法,以此類推。非數字類型也可以使用 + 運算符。字符串A + 字符串B表示連接字符串。+ 運算符的多種使用體現了重載概念的應用。
雖然不能讓一個數字和字符串相加,但是不同類型的數字相加是可以的。整數和浮點數相加時,系統會使用浮點數加法。這種強制類型轉換遵循以下規則:
如果一個操作數是復數,另一個被轉換成復數
否則,如果一個操作數是浮點,另一個被轉換成浮點
否則,如果一個操作數是長整型,另一個被轉換成長整型
否則,兩者都是普通整數,直接相加。
此外的,還有不少算術運算符,這里不贅述。
同時Python對于整數還提供了位運算符,和C語言中一致,對我十分友好。
數字類型函數
轉換工廠函數int(),long(),float(),complex(),bool().將不同的類型,轉換成需要的類型。
功能函數,Python還有以下的內建函數用于數值運算abs(),coerce(),divmod(),pow(),round()
abs()是返回參數絕對值,如果是個復數,就返回math.sqrt(num.real**2 + num.imag**2)
coerce()是一個數據類型轉換函數,將兩個數值轉換成可以運算的數值類型。
divmod()是發揮一個包含商和余數的元組。也可以用復數和小數作為參數。
pow()和**都表示冪。一個為內建函數一個為運算符。
round()用于對浮點數進行四舍五入運算,有一個可選的小數位數參數,可以選擇精確位數。
int(),round(),math.floor()似乎在做同一件事,但int()是截去小數部分,floor()得到最接近原數但小于原數的整數,round()得到最接近原數的整數。
僅用于整數的函數
進制轉換,oct()和hex()返回8進制和16進制的數
ASCII轉換函數,chr()是接受數值返回字符,ord()是接受字符返回ASCII碼值
同時還有unichr()是接受Unicode碼值返回Unicode字符。
十進制浮點數
用十進制浮點可以提高一些浮點運算的精度,需要導入decimal模塊以便使用Decimal類
但是Decimal()只能導入字符串。
random模塊,random模塊包含多個偽隨機數發生器,以當前時間為隨機數種子,產生隨機數。
有以下幾個函數:
>>> import random>>> random.random()#隨機生成一個0到1之間的浮點數0.015119438297251486>>> random.uniform(10,20)#隨機生成兩個參數范圍內的浮點數15.620562881753816>>> random.uniform(20,10)#參數大小部分先后18.444370827768715>>> random.randint(10,20)#隨機生成兩個參數范圍內的整數18>>> random.randint(10,20)#參數大小不分先后11>>> random.randrange(1,100,15)#參數分別為(start,stop,step)16>>> random.choice("abcdefg")#序列里隨機獲取一個元素'g'>>> list = [1, 2, 3, 4, 5, 6, 7]>>> random.shuffle(list)#打亂列表的元素>>> print list[4, 6, 7, 5, 1, 3, 2]>>> random.sample(list,2)#從一個列表中隨機截取指定長度[3, 4]
新聞熱點
疑難解答