天天看點

[PYTHON] 核心程式設計筆記之五-Python數字

5.1 數字類型

建立數值對象和給變量指派

anInt = 1

aLong = -9999999999L

aFloat = 3.1415926

aComplex = 1.23+4.56j

如何更新數字對象

變量像一個指針指向裝變量值的盒子,對不可變類型來說,你無法改變盒子内容,但可以将指針指向一個新盒子,每次将另外的數字賦給變量時,實際上是建立了一個新的對象并把它賦給變量

anInt += 1

aFloat = 2.718281828

如何删除數字對象

del anInt

del aLong,aFloat,aComplex

5.2 整型

5.2.1 布爾型

5.2.2 标準整數類型

0101 84 -237 0x80 017 -680 -0x92

5.2.3 長整型

16384L -0x4E8L -2323124 045332423

29432432 0xDDWAFEGEGREHREHRERTJW -5432432L

注:用大寫字母"L"表示長整型

>>> aLong = 99999999999l

>>> aLong

99999999999L

>>> print aLong

99999999999

5.3 雙精度浮點數

0.0 -777. 1,6 -5.532423423 9.6e3 * 1.0

4.3e25 float(12) 4.2E-10 -90. -1.609E-19

5.4 複數

64.375+1j 4.23-8.5j 0.23-8.55j 1.23e-045+6.7e+089j

9.82432-8.342432J -.0224+0j

5.4.1複數的内建屬性

屬性描述

num.real該複數的實部

num num.imag該複數的虛數

num.conjugate()傳回該複數的共轭複數

>>> aComplex = -8.333-1.47j

>>> aComplex

(-8.333-1.47j)

>>> aComplex.real

-8.333

>>> aComplex.imag

-1.47

>>> aComplex.conjugate()

(-8.333+1.47j)

5.5 運算符

5.5.1 混合模式運算符

>>> 1 + 4.5

5.5

5.5.2 标準類型運算符

>>> 5.2 ==5.2

True

>>> -719 >= 833    

False

>>> 2 < 5 <9

>>> 77 > 66 == 66

>>> 0. < -90.4 < 55.3e2 != 3 <181

>>> (-1 < 1) or (1 < -1)

5.5.3 算數運算符

傳統除法

>>> 1/2 # 地闆除

>>> 1.0/2.0 # 真正除法

0.5

真正的除法

>>> from __future__ import division

>>> 1 / 2  

>>> 1.0 / 2.0

地闆除

>>> 1 // 2# 地闆除,傳回整數

>>> 1.0 // 2.0# 地闆除,傳回浮點數

0.0

>>> -1 // 2# 傳回比 -0.5小的整數,也就是 -1

-1

取餘

>>> 4%3

1

>>> 4%2

幂運算

>>> 3**2

9

>>> -3 ** 2

-9

>>> (-3) ** 2

>>> 4.0 ** -1.0

0.25

Python數值運算的例子:

>>> -442-77

-519

>>> 4 ** 3

64

>>> 4.2 ** 3.2

98.71831395268974

>>> 8/3

2.6666666666666665

>>> 8.0/3.0

>>> 8%3

2

>>> (60. - 32.) * (5. /9.)

15.555555555555557

>>> 14 * 0x04

56

>>> 0170 / 4

30.0

>>> 0x80 + 0777

639

>>> 45L * 22L

990L

>>> 16399L + 0xA94E8L

709879L

>>> -2147483648L - 52147483648L

-54294967296L

>>> 64.375+1j + 4.23-8.5j

(68.605-7.5j)

>>> 0+1j ** 2

(-1+0j)

>>> 1+1j ** 2

0j

>>> (1+1j) ** 2

2j

5.5.4 *位運算符(隻适用于整數)

位運算符功能

-num單目運算,對數的每一位去反,結果為

num1 << num2Num1 左移 num2位

num1 << num2Num1 右移 num2位

num1 & num2Num1 與 num2按位 與

num1 ^ num2Num1 異或 num2位

num1 | num2Num1 與 num2位按位 或

例:

>>> 30 & 45

12

>>> 30 | 45

63

>>> 45 & 60

44

>>> ~30

-31

>>> ~45

-46

>>> 45 << 1

90

>>> 60 >> 2

15

>>> 30 ^ 45

51

5.6 内建函數與工廠函數

5.6.1 标準類型函數

>>> cmp(-6,2)

>>> cmp(-4.33333,-2.7118281828)

>>> cmp(0xFF,255)

>>> str(0xFF)

'255'

>>> str(55.3e2)

'5530.0'

>>> type(0xff)

<type 'int'>

>>> type(9876543210L)

<type 'long'>

>>> type(2-1j)

<type 'complex'>

5.6.2 數字類型函數

内建函數示例:

>>> int(4.25)

4

>>>

>>> int(4.2555)

>>> long(42)

42L

>>> float(4)

>>> complex(4)

(4+0j)

>>> complex(2.4,-8)

(2.4-8j)

>>> complex(2.3e-10,45.3e4)

(2.3e-10+453000j)

數值工廠函數總結

類(工廠函數)操作

bool(obj) b傳回obj對象的布爾值,也就是obj.__nonzero__()方法的傳回值

int(obj,base=10)傳回一個字元串或數值對象的整數表示,類似string.atoi();

long(obj,base=10)傳回一個字元或資料對象的長整數表示,類似string.atol()

float(obj)傳回一個字元串或資料對象的浮點數表示,類似string.atol()

complex(str) or

complex(real,imag=0.0)傳回一個字元串的複數表示,或者根據給定的實數(及一個可選的虛數部分)生成一個複數對象

功能函數:

Python有五個運算内建函數用于數值運算: abs(),coerce(),divmod(),pow()和round()

abs()傳回給定參數的絕對值

>>> abs(-1)

>>> abs(10.)

10.0

>>> abs(1.2-2.1j)

2.418677324489565

>>> abs(0.23-0.78)

0.55

函數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(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)

((-0+0j), (2+1j))

pow()和 ** 都可以進行指數運算

>>> pow(2,5)

32

>>> pow(5,2)

25

>>> pow(3.141592,2)

9.869600294464002

KeyboardInterrupt

>>> pow(1+1j,3)

(-2+2j)

round()對浮點數進行四舍五入,第二個參數表示精确到小數點多少位,沒有表示精确到整數位

>>> round(3)

3.0

>>> round(3.45)

>>> round(3.499999999999)

>>> round(3.499999999999,1)

3.5

>>> import math

>>> for eachNum in range(10):

...   print round(math.pi,eachNum) #pi即為π

...

3.1

3.14

3.142

3.1416

3.14159

3.141593

3.1415927

3.14159265

3.141592654

>>> round(-3.5)

-4.0

>>> round(-3.4)

-3.0

>>> round(-3.49)

>>> round(-3.49,1)

-3.5

注:

int() 直接截去小數部分(傳回值為整數)

floor()得到最接近原數但小于原數的整數(傳回浮點數)

round()得到最接近原數的整數(傳回浮點數)\

>>> for eachNum in (.2,.7,1.2,1.7,-.7,-1.2,-1.7):              

...   print "int(%.1f) \t %+.1f" % (eachNum,float(int(eachNum)))

...   print "floor(%.1f) \t %+.1f" % (eachNum,math.floor(eachNum))

...   print "round(%.1f) \t %+.1f" % (eachNum,round(eachNum))

...   print '-' * 20

int(0.2)        +0.0

floor(0.2)      +0.0

round(0.2)      +0.0

--------------------

int(0.7)        +0.0

floor(0.7)      +0.0

round(0.7)      +1.0

int(1.2)        +1.0

floor(1.2)      +1.0

round(1.2)      +1.0

int(1.7)        +1.0

floor(1.7)      +1.0

round(1.7)      +2.0

int(-0.7)       +0.0

floor(-0.7)     -1.0

round(-0.7)     -1.0

int(-1.2)       -1.0

floor(-1.2)     -2.0

round(-1.2)     -1.0

int(-1.7)       -1.0

floor(-1.7)     -2.0

round(-1.7)     -2.0

數值運算内建函數

函數功能

abs(num)傳回num的絕對值

coerce将num1和num2轉換成同一類型,然後以一個元祖的形式傳回

divmod(num1,num2)除法-取餘運算的結合,傳回一個元祖(num1/num2,num1%num2),對浮點數和複數的商進行下舍入

(複數取實數部分的商)

pow(num1,num2,mod=1)取num1的num2次方,如果提供mod參數,則計算結果再對mod進行取餘運算

round(flt,ndig=0)接受一個浮點數fit并對其四舍五入,白村ndig位小數,若不提供ndig參數,則預設小數點後0位

round()僅用于浮點數.

5.6.3 僅用于整數的函數

進制轉換函數

>>> hex(255)

'0xff'

>>> hex(4324324)

'0x41fbe4'

>>> hex(432432*2)

'0xd3260'

>>> oct(255)

'0377'

>>> oct(4324324)

'020375744'

>>> oct(432432*2)

'03231140'

ASCII轉換函數

>>> ord('a')

97

>>> ord('A')

65

>>> ord('O')

79

>>> chr(97)

'a'

>>> chr(65L)

'A'

>>> chr(48)

'0'

僅适用于整數的内建函數

函數操作

hex(num)将數字轉化成16進制并以字元串輸出

oct(num)将數字轉換成8進制并以字元串輸出

chr(num)将ASCII值的數字轉換成ASCII字元 範圍0<=num<=255

ord(chr)接受一個ASCII或Unicode字元(長度為1的字元串),傳回相應的ASCII或Unicode值

unichr(num)接受Unicode碼值,範圍其對應的Unicode字元,所接受的碼值範圍依賴于你的Python是建構于USC-2還是UCS-4

5.7.1 布爾"數"

永恒不變的兩個值 True或False

布爾型是整型的子類,但不能再被繼承二生成它的子類

沒有__nonzero__()方法的對象預設是True

對于值為零的任何數字或空集(空清單,空元祖和空字典等)在Python中布爾值都為False

在數字運算中,布爾值的True和False分别對應1和0

#intro

>>> bool(1)

>>> bool(True)

>>> bool(0)  

>>> bool('1')

>>> bool('0')

>>> bool([])

>>> bool((1))

# 使用布爾值

>>> foo = 42

>>> bar = foo < 100

>>> bar

>>> print bar + 100

101

>>> print '%s' % bar

>>> print '%d' % bar

# 無 __nonzero__()

>>> class C: pass

>>> c = C()      

>>> bool(c)

>>> bool(C)

慎用:

>>> True,False = False,True

>>> bool(False)

5.7.2 十進制浮點數

5.8 相關子產品

子產品介紹

decimal十進制浮點運算類Decimal

array高效數值數組(字元,整數,浮點數等等)

math/cmath标準C庫數學運算函數,正常數學運算在match子產品,複數運算在cmath子產品

operator數學運算符的函數實作,比如 tor.sub(m,n)等價于 m - n

random多種僞随機數生成器

核心子產品:ramdom

兩個整數參數,傳回兩者之間的随機整數:

randrange()随機傳回range([start,]stop[,step])結果的一項

uniform()幾乎和randint()一樣,不過它傳回時兩者之間的一個浮點數

random()類似uniform() 不過下限為0.0 上限為1.0

choice()随機傳回給定序列的一個元素

     本文轉自 showerlee 51CTO部落格,原文連結:http://blog.51cto.com/showerlee/1330263,如需轉載請自行聯系原作者