做(zuò)自(zì)由與創造的先行(xíng)者

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

Python開(kāi)發手冊

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

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

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

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

糾錯

所有內(nèi)置的數(shù)字類型都(dōu)支持以下(xià)操作(zuò)。有關運營商的優先事項,請(qǐng)參閱電力運營商和(hé)後續章(zhāng)節。

手術(shù)

結果

筆(bǐ)記

x + y

x與y之和(hé)

x - y

x與y的差

x * y

x與y的乘積

x / y

x與y的商數(shù)

(1)

x // y

x與y的商的整數(shù)部分

(4)(5)

x%y

x / y的餘數(shù)部分

(4)

-X

x的負數(shù)

+ X

x的正數(shù)

ABS(x)的

絕對值

(3)

int(x)的

x轉換為(wèi)整數(shù)

(2)

long(x)的

x轉換為(wèi)長(cháng)整數(shù)

(2)

float(x)的

x轉換為(wèi)浮點

(6)

complex(RE,IM)

與實數(shù)部分相關的複數(shù),虛數(shù)部分im。默認為(wèi)零。

c.conjugate()

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

divmod(x,y)

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

(3)(4)

pow(x,y)

x到權力y

(3)(7)

x ** y

x到權力y

(7)

筆(bǐ)記:

對于(純或長(cháng))整數(shù)除法,結果是一(yī)個整數(shù)。結果總是向負無窮大舍入:1/2是0,(-1)/ 2是-1,1 /( - 2)是-1,(-1)/( - 2)是0.請(qǐng)注意,如(rú)果任一(yī)操作(zuò)數(shù)是長(cháng)整型,則結果為(wèi)長(cháng)整數(shù),無論​​數(shù)值如(rú)何。

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

有關完整說明(míng),請(qǐng)參閱內(nèi)置函數(shù)。

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

也被稱為(wèi)整數(shù)除法。結果值是一(yī)個整數(shù),雖然結果的類型不一(yī)定是int。

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

Python定義pow(0, 0)和(hé)0 ** 0将會1像編程語言一(yī)樣常見(jiàn)。

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

Operation

結果

math.trunc(x)的

x截斷為(wèi)Integral

round(x,n)

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

math.floor(x)的

作(zuò)為(wèi)float <= x的最大整數(shù)

math.ceil(x)的

作(zuò)為(wèi)float> = x的最小整數(shù)

4.1。整數(shù)類型的按位運算

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

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

此表列出按升序優先級排序的按位運算:

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的位反轉

注釋:

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

左移n位相當于乘以pow(2, n)。如(rú)果結果超出純整數(shù)範圍,則返回一(yī)個長(cháng)整數(shù)。

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

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

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

int.bit_length()long.bit_length()

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

>>> n = -37

>>> bin(n)

'-0b100101'

>>> n.bit_length()

6

複制

更确切地(dì)說,如(rú)果x不為(wèi)零,則x.bit_length()是唯一(yī)的正整數(shù)k這(zhè)樣2**(k-1) <= abs(x) < 2**k。等價地(dì),當abs(x)小到足以得到正确的舍入對數(shù)時(shí),則k = 1 + int(log(abs(x), 2))。如(rú)果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ā)方法浮動

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

float.as_integer_ratio()

返回一(yī)對整數(shù),其比例與原始浮點數(shù)完全相等,并帶有一(yī)個正的分母。提高OverflowError無窮大和(hé)ValueErrorNaNs。

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

float.is_integer()

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

>>> (-2.0).is_integer()

True

>>> (3.2).is_integer()

False

複制

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

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

float.hex()

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

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

float.fromhex(s)

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

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

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

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

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

複制

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

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

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

3740.0

複制

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

>>> float.hex(3740.0)

'0x1.d380000000000p+11'

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