[Learning Python] Chapter 5 Numeric Types

1, 在Python 2.x 中。Python的integer,有兩種類型,normal和long。Normal一般是32位的。Long表示無限精度,由計算機決定。若是數字後面有l或者L,這會強制將該數字轉換爲long類型。但其實,用戶沒必要這樣作,由於Python會在數值溢出的狀況下自動將normal的類型轉換爲long類型。
然而,在Python 3.x中,normal和long合併了,沒有區別了。此時不可再在數字尾部加入l或者L了。編程

2,integer能夠用十進制(decimal)、十六進制(hexadecimal)、八進制(octal)、二進制(binary)來表示。後面三種在編程領域很常見。
十六進制(hexadecimal):以0x或者0X開頭,接0~9或者A~F,大小寫沒有關係;
八進制(octal):以0o或者0O開頭,接0~7;
二進制(binary):以0b或者0B開頭,接0~1.
想要將數字轉換爲十進制的,能夠用int(數值)方法:如int(0o100)=64;
想要將數字轉換爲八進制的,能夠用oct(數值)方法,如oct(0x40)= 0o100;
想要將數字轉換爲十六進制的,能夠用hex(數值)方法,如hex(64)= 0x40;
想要將數字轉換爲二進制的,能夠用bin(數值)方法,如bin(64)= 0b1000000;數組

3,使用以下的方法能夠將integer I 轉換爲十六進制數、八進制數、二進制數:
hex(I)、oct(I)、bin(I)。函數

4,複數 complex numbers。由實數+虛數組成。其中,虛數要以j或者J結尾。複數能夠沒有實數部分。ui

5, str()和repr()這兩個方法都是能夠將數值轉換爲字符串,不一樣的是,str()對用戶比較友好,repr()對Python比較友好。但一般狀況下,它們都是相同的。.net

6,在Python中,除法分爲三種:
6.1,true:表示真正的除法,返回值包含小數部分,屬於float型,而無論除數和被除數是什麼類型的數據。跟數學裏面的除法概念吻合;
6.2,classic:若是除數或被除數之一是float類型的數據,classic除法的商保留小數部分,爲float型數據。而若是除數和被除數皆爲integer,則商會去掉小數部分,往下取整(好比,原本是2.6,取整後爲2。而原本是-2.7,取整後爲-3)。
6.3,floor:這種除法的商會去掉小數部分,向小的方向靠攏。若是除數和被除數皆爲integer 類型,這商也是integer。而若是除數和被除數之一是float型,則商也是float型。code

7, 在Python 2.X中,/表示classic型除法,//表示floor型除法。
在Python 3.x中,/表示true型除法,//表示floor型除法。
Python 3.x已經沒有classic型除法了。
ps: 若是在Python2.x中想要用到3.x的除法,能夠在開頭加入這樣的statement:orm

from __future__ import division

8,爲了讓代碼在Python2.x和3.x中都兼容,若是須要取整的操做,老是用//比較好。blog

9,在math模塊中,提供了floor和trunc的方法。很是有用:ci

>>>import math
>>>math.floor(2.5)   # closest number below value
2
>>>math.floor(-2.5)
-3
>>>math.trunc(2.5)  # truncate fractional part
2
>>>math.trunc(-2.5)
-2
注意:int(I)也有truncate的功能。

10, 在Python中,實部和虛部都是float型的,虛部以j或者J結尾。字符串

11,在Python 2.x中,八進制能夠以0開頭,可是在Python 3.x中,不能以0開頭,必定要以0o或者0O開頭!

12,位的運算bitwise operations

<<表示位向左移動
>>表示位向右移動
| 表示或運算
& 表示AND運算
^ 表示異或運算(二者不一樣爲1,相同爲0)

能夠用bit_lenth()方法計算二進制數有多少位。或者len(bin())-2。由於len()會包含開頭的0b這兩位。

13,位的運算對Python這種高級語言不重要,若是須要作不少位運算,應該考慮低級語言如C語言。

14,round()方法能夠作小數的四捨五入。如round(3.78)= 4.0, round(3,789, 2) = 3.79, round()裏面的第二個參數表示的是保留多少位小數。

15,Python中的pow()函數用來計算指數。好比pow(2,4)=16, 和 2 ** 4同樣的結果。

16,Python中,有自帶的min和max()方法。min和max方法接受任意個單獨的參數。如min(3, 1, 2, 4)= 1.

17,Python中有sum方法,能夠將一列數相加起來,可是這列數應該寫在括號內做爲一個sequence,好比sum((1,2,3,4)) = 10,也能夠是這樣的sum([1, 2, 3, 4])。

18,abs函數能夠取絕對值。

19,在Python中,有三種方法能夠計算平方根:

A, math.sqrt(144)   #Module
B, 144 ** .5        #Expression
C, pow(144, .5)    #Built-in

20, 在Python中,計算0.1 + 0.1 + 0.1 – 0.3 並不會獲得0這個準確的值。這是因爲計算機因爲缺乏精確度而沒法精確地保存數據引發的。這個時候,decimal模塊很好的解決了這個問題,經過調用decimal模塊的Decimal構造函數,把數據轉換爲str型傳入,再進行運算,結果就會返回精確的0,以下:

from decimal import Decimal
print Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')

結果:0.0
若是傳入的參數仍然是float型,將沒法得到這個結果。

21,使用Decimal()函數的時候。也能夠設定全局精確度:

decimal.getcontext().prec = 4  #設定全局精確度爲4位小數。

22,使用Fraction()函數,也能夠得到和Decimal()同樣的精確效果。Fraction()函數位於fractions 模塊中,須要先import纔可使用。
Fraction(numerator, denominator),會自動的簡化分數。
Fraction()還能夠將str參數轉換爲分數,好比Fraction(‘.25’)=Fraction(1, 4)

23, 初始化一個空的set,使用S = set()。建立一個新的set而且賦值,使用 S = {1, 2, 3, 4}。後續若需再想set裏面增長item,能夠用S.add(‘…’)

24, set的運算,&表示交集,| 表示並集,- 表示差異,> 表示super set,返回布爾值。這些運算必須都是set類型。

25,union也能夠用來創造出並集運算。Union裏的參數能夠是list,能夠是set,還能夠是tuple。
{1,2, 3}.union([3, 4])
{1,2, 3}.union({3, 4})

26,intersection也能夠用來計算交集,參數能夠是list,能夠是set,還能夠是tuple。

27,issubset()函數能夠判斷某set是不是令一個set的子集

28,set和tuple的區別:

Set在後續能夠增長值,減小值,但tuple不能
Set裏面的值必須是互不相同的,但tuple能夠接受相同的值。
Set能夠內嵌tuple,不能內嵌list,dictionary。

http://blog.csdn.net/u0103675...

29,set comprehensions

{x ** 2 for x in [1, 2, 3, 4]}
{16, 1, 4, 9}

30, set能夠用來過濾掉重複的item:

>>> L = [1, 2, 1, 3, 2, 4, 5]
>>> set(L)
{1, 2, 3, 4, 5}

31,set的運算:

>>> engineers = {'bob', 'sue', 'ann', 'vic'}
>>> managers = {'tom', 'sue'}
>>> 'bob' in engineers # Is bob an engineer?
True
>>> engineers & managers # Who is both engineer and manager?
{'sue'}
>>> engineers | managers # All people in either category
{'bob', 'tom', 'sue', 'vic', 'ann'}
>>> engineers - managers # Engineers who are not managers
{'vic', 'ann', 'bob'}
>>> managers - engineers # Managers who are not engineers
{'tom'}
>>> engineers > managers # Are all managers engineers? (superset)
False
>>> {'bob', 'sue'} < engineers # Are both engineers? (subset)
True
>>> (managers | engineers) > managers # All people is a superset of managers
True
>>> managers ^ engineers # Who is in one but not both?
{'tom', 'vic', 'ann', 'bob'}
>>> (managers | engineers) - (managers ^ engineers) # Intersection!
{'sue'}
相關文章
相關標籤/搜索