做自(zì)由與創造的先行者

Types: 4. Numeric Types — int, float, long, complex

Python開(kāi)發手冊

4. Numeric Types — int, float, long, complex

有四種不同的數字類型:普通整數,長整數,浮點數和(hé)複數。另外(wài),布爾也(yě)是普通整數的一個子類型。在C 中實現(xiàn)純整數(也(yě)稱爲整數)long,它使它們具有至少32位的精度(sys.maxint總是設置爲當前平台的最大(dà)純整數值,最小(xiǎo)值爲-sys.maxint - 1)。長整數具有無限精度。浮點數通常double在C中實現(xiàn); 有關運行程序的機器的浮點數的精度和(hé)内部表示的信息可在sys.float_info。複數有一個實部和(hé)虛部,每個部分都是一個浮點數。要從(cóng)複數z中提取這(zhè)些(xiē)零件,請(qǐng)使用(yòng)z.real和(hé)z.imag。(标準庫包含額外(wài)的數字類型,fractions用(yòng)于保存有理(lǐ)數據,并decimal保存具有用(yòng)戶可定義精度的浮點數。)

數字由數字文(wén)字或内置函數和(hé)運算(suàn)符的結果創建。未經修飾的整數文(wén)字(包括二進制,十六進制和(hé)八進制數字)會(huì)産生純整數,除非它們表示的值太大(dà)而不能(néng)表示爲普通整數,在這(zhè)種情況下(xià),它們會(huì)産生長整數。一個整數文(wén)字'L'或'l'後綴産量長整型('L'是首選,因爲1l看(kàn)起來(lái)太的十一!)。包含小(xiǎo)數點或指數符号的數字文(wén)字會(huì)生成浮點數字。追加'j'或'J'數字文(wén)字會(huì)産生一個虛數(一個具有零實數部分的複數),您可以将其添加到(dào)整數或浮點數以獲得具有實部和(hé)虛部的複數。

Python完全支持混合算(suàn)術:當二進制算(suàn)術運算(suàn)符具有不同數值類型的操作(zuò)數時(shí),具有“窄”類型的操作(zuò)數會(huì)擴展到(dào)另一個操作(zuò)數,其中純整數比窄整數窄于浮點比窄比複雜(zá)。混合類型的數字之間的比較使用(yòng)相同的規則。[2]的構造int(),long(),float(),和(hé)complex()可以用(yòng)于産生特定類型的号碼。

糾錯

所有内置的數字類型都支持以下(xià)操作(zuò)。有關運營商的優先事(shì)項,請(qǐng)參閱電力運營商和(hé)後續章節。

手術

結果

筆(bǐ)記

x + y

x與y之和(hé)

x - y

x與y的差

x * y

x與y的乘積

x / y

x與y的商數

(1)

x // y

x與y的商的整數部分

(4)(5)

x%y

x / y的餘數部分

(4)

-X

x的負數

+ X

x的正數

ABS(x)的

絕對(duì)值

(3)

int(x)的

x轉換爲整數

(2)

long(x)的

x轉換爲長整數

(2)

float(x)的

x轉換爲浮點

(6)

complex(RE,IM)

與實數部分相關的複數,虛數部分im。默認爲零。

c.conjugate()

複數c的共轭。(實際身份)

divmod(x,y)

返回tuple(x//y,x%y)

(3)(4)

pow(x,y)

x到(dào)權力y

(3)(7)

x ** y

x到(dào)權力y

(7)

筆(bǐ)記:

對(duì)于(純或長)整數除法,結果是一個整數。結果總是向負無窮大(dà)舍入:1/2是0,(-1)/ 2是-1,1 /( - 2)是-1,(-1)/( - 2)是0.請(qǐng)注意,如果任一操作(zuò)數是長整型,則結果爲長整數,無論​​數值如何。

像使用(yòng)相關函數一樣,使用(yòng)int()或long()截斷爲零的浮點數轉換math.trunc()。使用(yòng)該功能(néng)math.floor()向下(xià)滾動并向math.ceil()上(shàng)滾動。

有關完整說明(míng),請(qǐng)參閱内置函數。

自(zì)從(cóng)版本2.3開(kāi)始棄用(yòng):樓層劃分運算(suàn)符,模運算(suàn)符和(hé)divmod()函數不再爲複數定義。相反,abs()如果适用(yòng),則使用(yòng)該函數将其轉換爲浮點數。

也(yě)被稱爲整數除法。結果值是一個整數,雖然結果的類型不一定是int。

對(duì)于非數字(NaN)和(hé)正或負無窮,float還接受帶有可選前綴“+”或“ - ”的字符串“nan”和(hé)“inf”。2.6版本中的新功能(néng)。

Python定義pow(0, 0)和(hé)0 ** 0将會(huì)1像編程語言一樣常見。

所有numbers.Real類型(int,long和(hé)float)還包括以下(xià)操作(zuò):

Operation

結果

math.trunc(x)的

x截斷爲Integral

round(x,n)

x四舍五入爲n位數,從(cóng)零開(kāi)始取整。如果省略n,則默認爲0。

math.floor(x)的

作(zuò)爲float <= x的最大(dà)整數

math.ceil(x)的

作(zuò)爲float> = x的最小(xiǎo)整數

4.1。整數類型的按位運算(suàn)

按位運算(suàn)隻對(duì)整數有意義。負數被視(shì)爲它們的2的補碼值(假定在操作(zuò)過程中沒有溢出發生的位數足夠大(dà))。

二進制按位運算(suàn)的優先級均低(dī)于數值運算(suàn)并高(gāo)于比較; 一元運算(suàn)~與其他(tā)一元運算(suàn)(+和(hé)-)具有相同的優先級。

此表列出按升序優先級排序的按位運算(suàn):

Operation

結果

筆(bǐ)記

x | 和(hé)

按位或x和(hé)y

x ^ y

按位排他(tā)或x和(hé)y

x&y

按位和(hé)x和(hé)y

x << n

x左移n位

(1)(2)

x >> n

x右移n位

(1)(3)

〜X

x的位反轉

注釋:

負轉移次數是非法的,并導緻a ValueError被提出。

左移n位相當于乘以pow(2, n)。如果結果超出純整數範圍,則返回一個長整數。

右移n位相當于除以pow(2, n)。

4.2。整數類型的其他(tā)方法

整數類型實現(xiàn)numbers.Integral 抽象基類。另外(wài),他(tā)們還提供了(le)另一種方法:

int.bit_length()long.bit_length()

返回表示二進制整數所需的位數,不包括符号和(hé)前導零:

>>> n = -37

>>> bin(n)

'-0b100101'

>>> n.bit_length()

6

複制

更确切地說,如果x不爲零,則x.bit_length()是唯一的正整數k這(zhè)樣2**(k-1) <= abs(x) < 2**k。等價地,當abs(x)小(xiǎo)到(dào)足以得到(dào)正确的舍入對(duì)數時(shí),則k = 1 + int(log(abs(x), 2))。如果x是零,則x.bit_length()返回0。

相當于:

def bit_length(self):

s = bin(self) # binary representation: bin(-37) --> '-0b100101'

s = s.lstrip('-0b') # remove leading zeros and minus sign

return len(s) # len('100101') --> 6

複制

2.7版本的新功能(néng)。

4.3。其他(tā)方法浮動

浮點類型實現(xiàn)numbers.Real 抽象基類。float還有以下(xià)附加方法。

float.as_integer_ratio()

返回一對(duì)整數,其比例與原始浮點數完全相等,并帶有一個正的分母。提高(gāo)OverflowError無窮大(dà)和(hé)ValueErrorNaNs。

2.6版本中的新功能(néng)。

float.is_integer()

返回True如果浮子實例是有限的與積分值,并False以其他(tā)方式:

>>> (-2.0).is_integer()

True

>>> (3.2).is_integer()

False

複制

2.6版本中的新功能(néng)。

兩種方法支持與十六進制字符串的轉換。由于Python的浮點數在内部存儲爲二進制數,因此将浮點數轉換爲十進制字符串或從(cóng)十進制字符串轉換浮點數通常會(huì)導緻一個小(xiǎo)的舍入誤差 相反,十六進制字符串允許精确表示和(hé)指定浮點數。這(zhè)在調試和(hé)數值工(gōng)作(zuò)時(shí)非常有用(yòng)。

float.hex()

将浮點數的表示形式返回爲十六進制字符串。對(duì)于有限的浮點數,這(zhè)種表示将總是包括前導0x和(hé)尾随p以及指數。

2.6版本中的新功能(néng)。

float.fromhex(s)

Class方法返回由十六進制字符串s表示的float 。字符串s可能(néng)有前導和(hé)尾随空(kōng)白(bái)。

2.6版本中的新功能(néng)。

請(qǐng)注意,這(zhè)float.hex()是一種實例方法,而它float.fromhex()是一種類方法。

十六進制字符串采用(yòng)以下(xià)形式:

[sign] ['0x'] integer ['.' fraction] ['p' exponent]

複制

其中可選sign可以是+或者-,integer并且fraction是十六進制數字的字符串,并且exponent是具有可選前導符号的十進制整數。大(dà)小(xiǎo)寫不重要,整數或小(xiǎo)數中至少有一個十六進制數字。此語法與C99标準的6.4.4.2節中指定的語法類似,也(yě)與Java 1.5之後的語法類似。特别是,輸出float.hex()可用(yòng)作(zuò)C或Java代碼中的十六進制浮點字面值,并且由C的%a格式字符或Java 産生的十六進制字符串Double.toHexString被接受float.fromhex()。

請(qǐng)注意,指數是用(yòng)十進制而不是十六進制編寫的,它給出了(le)乘以系數的2的幂。例如,十六進制字符串0x3.a7p10表示浮點數(3 + 10./16 + 7./16**2) * 2.0**10,或者3740.0:

>>> float.fromhex('0x3.a7p10')

3740.0

複制

将反向轉換應用(yòng)于3740.0給出代表相同數字的不同十六進制字符串:

>>> float.hex(3740.0)

'0x1.d380000000000p+11'

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:Types: 5. Iterator Types
上(shàng)一篇:Types: 3. Comparisons