摘要:上一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型邏輯值檢測布爾運(yùn)算比較下一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型迭代器類型序列類型數(shù)字類型存在三種不同的數(shù)字類型整數(shù)浮點(diǎn)數(shù)和復(fù)數(shù)。標(biāo)準(zhǔn)庫包含附加的數(shù)字類型,如表示有理數(shù)的以及以用戶定制精度表示浮點(diǎn)數(shù)的。
上一篇文章:Python標(biāo)準(zhǔn)庫---9、內(nèi)置類型:邏輯值檢測、布爾運(yùn)算、比較數(shù)字類型 --- int, float, complex
下一篇文章:Python標(biāo)準(zhǔn)庫---11、內(nèi)置類型:迭代器類型、序列類型
存在三種不同的數(shù)字類型: 整數(shù), 浮點(diǎn)數(shù) 和 復(fù)數(shù)。 此外,布爾值屬于整數(shù)的子類型。 整數(shù)具有無限的精度。 浮點(diǎn)數(shù)通常使用 C 中的 double 來實(shí)現(xiàn);有關(guān)你的程序運(yùn)行所在機(jī)器上浮點(diǎn)數(shù)的精度和內(nèi)部表示法可在 sys.float_info 中查看。 復(fù)數(shù)包含實(shí)部和虛部,分別以一個浮點(diǎn)數(shù)表示。 要從一個復(fù)數(shù) z 中提取這兩個部分,可使用 z.real 和 z.imag。 (標(biāo)準(zhǔn)庫包含附加的數(shù)字類型,如表示有理數(shù)的 fractions 以及以用戶定制精度表示浮點(diǎn)數(shù)的 decimal。)
數(shù)字是由數(shù)字字面值或內(nèi)置函數(shù)與運(yùn)算符的結(jié)果來創(chuàng)建的。 不帶修飾的整數(shù)字面值(包括十六進(jìn)制、八進(jìn)制和二進(jìn)制數(shù))會生成整數(shù)。 包含小數(shù)點(diǎn)或冪運(yùn)算符的數(shù)字字面值會生成浮點(diǎn)數(shù)。 在數(shù)字字面值末尾加上 "j" 或 "J" 會生成虛數(shù)(實(shí)部為零的復(fù)數(shù)),你可以將其與整數(shù)或浮點(diǎn)數(shù)相加來得到具有實(shí)部和虛部的復(fù)數(shù)。
Python 完全支持混合算術(shù):當(dāng)一個二元運(yùn)算符用于不同數(shù)字類型的操作數(shù)時,具有“較窄” 類型的操作數(shù)會被擴(kuò)展為另一個操作數(shù)的類型,整數(shù)比浮點(diǎn)數(shù)更窄,浮點(diǎn)數(shù)又比復(fù)數(shù)更窄。 混合類型數(shù)字之間的比較也使用相同的規(guī)則。 構(gòu)造器 int(), float() 和 complex() 可被用于生成特定類型的數(shù)字。
所有數(shù)字類型(復(fù)數(shù)除外)都支持下列運(yùn)算,按優(yōu)先級升序排序(所有數(shù)字運(yùn)算的優(yōu)先級都高于比較運(yùn)算):
evernotecid://D603D29C-DFBA-4C04-85E9-CCA3C33763F6/appyinxiangcom/23852268/ENResource/p19
注釋:
也稱為整數(shù)除法。 結(jié)果值是一個整數(shù),但結(jié)果的類型不一定是 int。 運(yùn)算結(jié)果總是向負(fù)無窮的方向舍入: 1//2 為 0, (-1)//2 為 -1, 1//(-2) 為 -1 而 (-1)//(-2) 為 0。
不可用于復(fù)數(shù)。 而應(yīng)在適當(dāng)條件下使用 abs() 轉(zhuǎn)換為浮點(diǎn)數(shù)。
從浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)會被舍入或是像在 C 語言中一樣被截斷;請參閱 math.floor() 和 math.ceil() 函數(shù)查看轉(zhuǎn)換的完整定義。
float 也接受字符串 "nan" 和附帶可選前綴 "+" 或 "-" 的 "inf" 分別表示非數(shù)字 (NaN) 以及正或負(fù)無窮。
Python 將 pow(0, 0) 和 0 ** 0 定義為 1,這是編程語言的普遍做法。
接受的數(shù)字字面值包括數(shù)碼 0 到 9 或任何等效的 Unicode 字符(具有 Nd 特征屬性的代碼點(diǎn))。
請參閱 http://www.unicode.org/Public... 查看具有 Nd 特征屬性的代碼點(diǎn)的完整列表。整數(shù)類型的按位運(yùn)算
按位運(yùn)算只對整數(shù)有意義。 計算按位運(yùn)算的結(jié)果,就相當(dāng)于使用無窮多個二進(jìn)制符號位對二的補(bǔ)碼執(zhí)行操作。
二進(jìn)制按位運(yùn)算的優(yōu)先級全都低于數(shù)字運(yùn)算,但又高于比較運(yùn)算;一元運(yùn)算 ~ 具有與其他一元算術(shù)運(yùn)算 (+ and -) 相同的優(yōu)先級。
此表格是以優(yōu)先級升序排序的按位運(yùn)算列表:
注釋:
負(fù)的移位數(shù)是非法的,會導(dǎo)致引發(fā) ValueError。
左移 n 位等價于不帶溢出檢測地乘以 pow(2, n)。
右移 n 位等價于不帶溢出檢測地除以 pow(2, n)。
使用帶有至少一個額外符號擴(kuò)展位的有限個二進(jìn)制補(bǔ)碼表示(有效位寬度為 1 + max(x.bit_length(), y.bit_length()) 或以上)執(zhí)行這些計算就足以獲得相當(dāng)于有無數(shù)個符號位時的同樣結(jié)果。
整數(shù)類型的附加方法int 類型實(shí)現(xiàn)了 numbers.Integral abstract base class。 此外,它還提供了其他幾個方法:
int.bit_length()返回以二進(jìn)制表示一個整數(shù)所需要的位數(shù),不包括符號位和前面的零:
>>> >>> n = -37 >>> bin(n) "-0b100101" >>> n.bit_length() 6
更準(zhǔn)確地說,如果 x 非零,則 x.bit_length() 是使得 2(k-1) <= abs(x) < 2k 的唯一正整數(shù) k。 同樣地,當(dāng) abs(x) 小到足以具有正確的舍入對數(shù)時,則 k = 1 + int(log(abs(x), 2))。 如果 x 為零,則 x.bit_length() 返回 0。
等價于:
def bit_length(self): # binary representation: bin(-37) --> "-0b100101" s = bin(self) # remove leading zeros and minus sign s = s.lstrip("-0b") # len("100101") --> 6 return len(s)
3.1 新版功能.
int.to_bytes(length, byteorder, *, signed=False)返回表示一個整數(shù)的字節(jié)數(shù)組。
>>> (1024).to_bytes(2, byteorder="big") b"x04x00" >>> (1024).to_bytes(10, byteorder="big") b"x00x00x00x00x00x00x00x00x04x00" >>> (-1024).to_bytes(10, byteorder="big", signed=True) b"xffxffxffxffxffxffxffxffxfcx00" >>> x = 1000 >>> x.to_bytes((x.bit_length() + 7) // 8, byteorder="little") b"xe8x03"
整數(shù)會使用 length 個字節(jié)來表示。 如果整數(shù)不能用給定的字節(jié)數(shù)來表示則會引發(fā) OverflowError。
byteorder 參數(shù)確定用于表示整數(shù)的字節(jié)順序。 如果 byteorder 為 "big",則最高位字節(jié)放在字節(jié)數(shù)組的開頭。 如果 byteorder 為 "little",則最高位字節(jié)放在字節(jié)數(shù)組的末尾。 要請求主機(jī)系統(tǒng)上的原生字節(jié)順序,請使用 sys.byteorder 作為字節(jié)順序值。
signed 參數(shù)確定是否使用二的補(bǔ)碼來表示整數(shù)。 如果 signed 為 False 并且給出的是負(fù)整數(shù),則會引發(fā) OverflowError。 signed 的默認(rèn)值為 False。
3.2 新版功能.
classmethod int.from_bytes(bytes, byteorder, *, signed=False)返回由給定字節(jié)數(shù)組所表示的整數(shù)。
>>> int.from_bytes(b"x00x10", byteorder="big") 16 >>> int.from_bytes(b"x00x10", byteorder="little") 4096 >>> int.from_bytes(b"xfcx00", byteorder="big", signed=True) -1024 >>> int.from_bytes(b"xfcx00", byteorder="big", signed=False) 64512 >>> int.from_bytes([255, 0, 0], byteorder="big") 16711680
bytes 參數(shù)必須為一個 bytes-like object 或是生成字節(jié)的可迭代對象。
byteorder 參數(shù)確定用于表示整數(shù)的字節(jié)順序。 如果 byteorder 為 "big",則最高位字節(jié)放在字節(jié)數(shù)組的開頭。 如果 byteorder 為 "little",則最高位字節(jié)放在字節(jié)數(shù)組的末尾。 要請求主機(jī)系統(tǒng)上的原生字節(jié)順序,請使用 sys.byteorder 作為字節(jié)順序值。
signed 參數(shù)指明是否使用二的補(bǔ)碼來表示整數(shù)。
3.2 新版功能.
浮點(diǎn)類型的附加方法float 類型實(shí)現(xiàn)了 numbers.Real abstract base class。 float 還具有以下附加方法。
float.as_integer_ratio()返回一對整數(shù),其比率正好等于原浮點(diǎn)數(shù)并且分母為正數(shù)。 無窮大會引發(fā) OverflowError 而 NaN 則會引發(fā) ValueError。
float.is_integer()如果 float 實(shí)例可用有限位整數(shù)表示則返回 True,否則返回 False:
>>> >>> (-2.0).is_integer() True >>> (3.2).is_integer() False
兩個方法均支持與十六進(jìn)制數(shù)字符串之間的轉(zhuǎn)換。 由于 Python 浮點(diǎn)數(shù)在內(nèi)部存儲為二進(jìn)制數(shù),因此浮點(diǎn)數(shù)與 十進(jìn)制數(shù) 字符串之間的轉(zhuǎn)換往往會導(dǎo)致微小的舍入錯誤。 而十六進(jìn)制數(shù)字符串卻允許精確地表示和描述浮點(diǎn)數(shù)。 這在進(jìn)行調(diào)試和數(shù)值工作時非常有用。
float.hex()以十六進(jìn)制字符串的形式返回一個浮點(diǎn)數(shù)表示。 對于有限浮點(diǎn)數(shù),這種表示法將總是包含前導(dǎo)的 0x 和尾隨的 p 加指數(shù)。
classmethod float.fromhex(s)返回以十六進(jìn)制字符串 s 表示的浮點(diǎn)數(shù)的類方法。 字符串 s 可以帶有前導(dǎo)和尾隨的空格。
請注意 float.hex() 是實(shí)例方法,而 float.fromhex() 是類方法。
十六進(jìn)制字符串采用的形式為:
[sign] ["0x"] integer ["." fraction] ["p" exponent]
可選的 sign 可以是 + 或 -,integer 和 fraction 是十六進(jìn)制數(shù)碼組成的字符串,exponent 是帶有可選前導(dǎo)符的十進(jìn)制整數(shù)。 大小寫沒有影響,在 integer 或 fraction 中必須至少有一個十六進(jìn)制數(shù)碼。 此語法類似于 C99 標(biāo)準(zhǔn)的 6.4.4.2 小節(jié)中所描述的語法,也是 Java 1.5 以上所使用的語法。 特別地,float.hex() 的輸出可以用作 C 或 Java 代碼中的十六進(jìn)制浮點(diǎn)數(shù)字面值,而由 C 的 %a 格式字符或 Java 的 Double.toHexString 所生成的十六進(jìn)制數(shù)字符串由為 float.fromhex() 所接受。
請注意 exponent 是十進(jìn)制數(shù)而非十六進(jìn)制數(shù),它給出要與系數(shù)相乘的 2 的冪次。 例如,十六進(jìn)制數(shù)字符串 0x3.a7p10 表示浮點(diǎn)數(shù) (3 + 10./16 + 7./162) * 2.010 即 3740.0:
>>> >>> float.fromhex("0x3.a7p10") 3740.0
對 3740.0 應(yīng)用反向轉(zhuǎn)換會得到另一個代表相同數(shù)值的十六進(jìn)制數(shù)字符串:
>>> >>> float.hex(3740.0) "0x1.d380000000000p+11"數(shù)字類型的哈希運(yùn)算
對于可能為不同類型的數(shù)字 x 和 y,要求 x == y 時必定 hash(x) == hash(y) (詳情參見 __hash__() 方法的文檔)。 為了便于在各種數(shù)字類型 (包括 int, float, decimal.Decimal 和 fractions.Fraction) 上實(shí)現(xiàn)并保證效率,Python 對數(shù)字類型的哈希運(yùn)算是基于為任意有理數(shù)定義統(tǒng)一的數(shù)學(xué)函數(shù),因此該運(yùn)算對 int 和 fractions.Fraction 的全部實(shí)例,以及 float 和 decimal.Decimal 的全部有限實(shí)例均可用。 從本質(zhì)上說,此函數(shù)是通過以一個固定質(zhì)數(shù) P 進(jìn)行 P 降模給出的。 P 的值在 Python 中可以 sys.hash_info 的 modulus 屬性的形式被訪問。
CPython implementation detail: 目前所用的質(zhì)數(shù)設(shè)定,在 C long 為 32 位的機(jī)器上 P = 231 - 1 而在 C long 為 64 位的機(jī)器上 P = 261 - 1。
詳細(xì)規(guī)則如下所述:
如果 x = m / n 是一個非負(fù)的有理數(shù)且 n 不可被 P 整除,則定義 hash(x) 為 m * invmod(n, P) % P,其中 invmod(n, P) 是對 n 模 P 取反。
如果 x = m / n 是一個非負(fù)的有理數(shù)且 n 可被 P 整除(但 m 不能)則 n 不能對 P 降模,以上規(guī)則不適用;在此情況下則定義 hash(x) 為常數(shù)值 sys.hash_info.inf。
如果 x = m / n 是一個負(fù)的有理數(shù)則定義 hash(x) 為 -hash(-x)。 如果結(jié)果哈希值為 -1 則將其替換為 -2。
特定值 sys.hash_info.inf, -sys.hash_info.inf 和 sys.hash_info.nan 被用作正無窮、負(fù)無窮和空值(所分別對應(yīng)的)哈希值。 (所有可哈希的空值都具有相同的哈希值。)
對于一個 complex 值 z,會通過計算 hash(z.real) + sys.hash_info.imag hash(z.imag) 將實(shí)部和虛部的哈希值結(jié)合起來,并進(jìn)行降模 2sys.hash_info.width 以使其處于 range(-2(sys.hash_info.width - 1), 2*(sys.hash_info.width - 1)) 范圍之內(nèi)。 同樣地,如果結(jié)果為 -1 則將其替換為 -2。
為了闡明上述規(guī)則,這里有一些等價于內(nèi)置哈希算法的 Python 代碼示例,可用于計算有理數(shù)、float 或 complex 的哈希值:
import sys, math def hash_fraction(m, n): """Compute the hash of a rational number m / n. Assumes m and n are integers, with n positive. Equivalent to hash(fractions.Fraction(m, n)). """ P = sys.hash_info.modulus # Remove common factors of P. (Unnecessary if m and n already coprime.) while m % P == n % P == 0: m, n = m // P, n // P if n % P == 0: hash_value = sys.hash_info.inf else: # Fermat"s Little Theorem: pow(n, P-1, P) is 1, so # pow(n, P-2, P) gives the inverse of n modulo P. hash_value = (abs(m) % P) * pow(n, P - 2, P) % P if m < 0: hash_value = -hash_value if hash_value == -1: hash_value = -2 return hash_value def hash_float(x): """Compute the hash of a float x.""" if math.isnan(x): return sys.hash_info.nan elif math.isinf(x): return sys.hash_info.inf if x > 0 else -sys.hash_info.inf else: return hash_fraction(*x.as_integer_ratio()) def hash_complex(z): """Compute the hash of a complex number z.""" hash_value = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag) # do a signed reduction modulo 2**sys.hash_info.width M = 2**(sys.hash_info.width - 1) hash_value = (hash_value & (M - 1)) - (hash_value & M) if hash_value == -1: hash_value = -2 return hash_value
上一篇文章:Python標(biāo)準(zhǔn)庫---9、內(nèi)置類型:邏輯值檢測、布爾運(yùn)算、比較
下一篇文章:Python標(biāo)準(zhǔn)庫---11、內(nèi)置類型:迭代器類型、序列類型
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43976.html
摘要:上一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù)內(nèi)置函數(shù)返回對象命名屬性的值。返回表示當(dāng)前全局符號表的字典。例如,從二進(jìn)制數(shù)據(jù)庫文件中讀取固定寬度的塊,直至到達(dá)文件的末尾上一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù) 上一篇文章:Python標(biāo)準(zhǔn)庫---2、內(nèi)置函數(shù)(D-E-F)下一篇文章:Python標(biāo)準(zhǔn)庫---4、內(nèi)置函數(shù)(L-M-N-O) 內(nèi)置函數(shù): showImg(http...
摘要:上一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型數(shù)字類型下一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型文本序列類型迭代器類型支持在容器中進(jìn)行迭代的概念。該對象需要支持下文所述的迭代器協(xié)議。這是同時允許容器和迭代器配合和語句使用所必須的。 上一篇文章:Python標(biāo)準(zhǔn)庫---10、內(nèi)置類型:數(shù)字類型下一篇文章:Python標(biāo)準(zhǔn)庫---12、內(nèi)置類型:文本序列類型(str) ## 迭代器類型Python 支持在容器中進(jìn)行迭代的概念。...
摘要:邏輯值檢測任何對象都可以進(jìn)行邏輯值的檢測,以便在或作為條件或是作為下文所述布爾運(yùn)算的操作數(shù)來使用。重要例外布爾運(yùn)算和總是返回其中一個操作數(shù)。的優(yōu)先級比非布爾運(yùn)算符低,因此會被解讀為而會引發(fā)語法錯誤。它們的優(yōu)先級相同比布爾運(yùn)算的優(yōu)先級高。 上一篇文章:Python標(biāo)準(zhǔn)庫---8、內(nèi)置常量下一篇文章:Python標(biāo)準(zhǔn)庫---10、內(nèi)置類型:數(shù)字類型 內(nèi)置類型 以下部分描述了解釋器中內(nèi)置的...
摘要:如果對象允許,該函數(shù)將刪除指定的屬性。返回值為表達(dá)式求值的結(jié)果。語法錯誤將作為異常被報告。該函數(shù)返回值是。例如數(shù)字類型描述了浮點(diǎn)類型。將轉(zhuǎn)換為控制的格式化表示。上一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫內(nèi)置函數(shù) 上一篇文章:Python標(biāo)準(zhǔn)庫---1、內(nèi)置函數(shù)(A-B-C)下一篇文章:Python標(biāo)準(zhǔn)庫---3、內(nèi)置函數(shù)(G-H-I-J-K) 內(nèi)置函數(shù): showImg(https:/...
摘要:上一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型迭代器類型序列類型下一篇文章標(biāo)準(zhǔn)庫內(nèi)置類型二進(jìn)制序列類型文本序列類型在中處理文本數(shù)據(jù)是使用對象,也稱為字符串。正式的定義為十進(jìn)制數(shù)字符就是一般分類中的字符。 上一篇文章:Python標(biāo)準(zhǔn)庫---11、內(nèi)置類型:迭代器類型、序列類型(list-typle-range)下一篇文章:Python標(biāo)準(zhǔn)庫---13、內(nèi)置類型:二進(jìn)制序列類型 ( bytes, bytear...
閱讀 3486·2021-11-18 10:07
閱讀 1586·2021-11-04 16:08
閱讀 1502·2021-11-02 14:43
閱讀 1083·2021-10-09 09:59
閱讀 837·2021-09-08 10:43
閱讀 1073·2021-09-07 09:59
閱讀 954·2019-12-27 11:56
閱讀 994·2019-08-30 15:56