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)發