摘要:我們把這些內(nèi)置函數(shù)類型分成幾類進(jìn)行介紹。實(shí)參的合法范圍是到進(jìn)制表示是。產(chǎn)生一個(gè)將應(yīng)用于迭代器中所有元素并返回結(jié)果的迭代器。內(nèi)置的函數(shù)保證穩(wěn)定。
Python解釋器內(nèi)置了很多函數(shù)和類型,可以隨時(shí)隨地在編程中使用。其實(shí),我們?cè)谇懊娴膶W(xué)習(xí)中已經(jīng)接觸過(guò)好多內(nèi)置函數(shù)。
這里把它們總結(jié)成下面的表格,方便我們學(xué)習(xí)它們的使用:
說(shuō)明:
上面這個(gè)表格包含的有“內(nèi)置函數(shù)”和“內(nèi)置類型”,其中的內(nèi)置類型可以作為函數(shù)使用,把其它類型的對(duì)象轉(zhuǎn)變?yōu)樵擃愋偷膶?duì)象。比如int是一個(gè)內(nèi)置類型,int("123")就是把字符串轉(zhuǎn)換成整數(shù)。兩者在使用上沒(méi)有什么區(qū)別,官方文檔中也是把內(nèi)置類型當(dāng)做內(nèi)置函數(shù)介紹的。
通過(guò)ipython,我們可以查看表格中的是函數(shù)還是類型。比如:
In [14]: abs? Signature: abs(x, /) Docstring: Return the absolute value of the argument. Type: builtin_function_or_method In [15]: int? Init signature: int(self, /, *args, **kwargs) Docstring: int(x=0) -> integer int(x, base=10) -> integer Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero. If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by "+" or "-" and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal. >>> int("0b100", base=0) 4 Type: type Subclasses: bool, IntEnum, IntFlag, _NamedIntConstant
在ipython里面通過(guò)問(wèn)號(hào)?來(lái)查看其對(duì)應(yīng)的說(shuō)明,其中的Type就是它的類型,可以看到abs是一個(gè)內(nèi)置函數(shù)builtin_function_or_method,而int是一個(gè)類型type。
我們把這些內(nèi)置函數(shù)(類型)分成幾類進(jìn)行介紹。
數(shù)值型操作abs(x)
求x的絕對(duì)值。x可以是整數(shù)或浮點(diǎn)數(shù),如果是復(fù)數(shù)則返回它的模。
bin(x)
將一個(gè)整數(shù)轉(zhuǎn)變?yōu)橐粋€(gè)前綴為0b的二進(jìn)制字符串。結(jié)果是一個(gè)合法的 Python 表達(dá)式。如果 x 不是 Python 的 int 對(duì)象,那它需要定義?index() 方法返回一個(gè)整數(shù)。比如:
In [26]: bin(5) Out[26]: "0b101" In [27]: bin(-5) Out[27]: "-0b101"
x 不能是浮點(diǎn)數(shù),否則會(huì)報(bào)錯(cuò)。
還可以通過(guò)format()函數(shù)來(lái)進(jìn)行轉(zhuǎn)換:
In [30]: format(5, "#b") Out[30]: "0b101" In [31]: format(5, "b") Out[31]: "101"
還可以用f-string格式化來(lái)轉(zhuǎn)換:
In [32]: f"{5:#b}" Out[32]: "0b101" In [33]: f"{5:b}" Out[33]: "101"
chr(i)
返回 Unicode 碼位為整數(shù) i 的字符的字符串格式。例如,chr(97) 返回字符串 ‘a(chǎn)’,chr(20013) 返回字符串 ‘中’。這是 ord() 的逆函數(shù)。
實(shí)參的合法范圍是 0 到 1,114,111(16 進(jìn)制表示是 0x10FFFF)。如果 i 超過(guò)這個(gè)范圍,會(huì)觸發(fā) ValueError 異常。
divmod(a, b)
它將兩個(gè)(非復(fù)數(shù))數(shù)字作為實(shí)參,并在執(zhí)行整數(shù)除法時(shí)返回一對(duì)商和余數(shù)。對(duì)于混合操作數(shù)類型,適用雙目算術(shù)運(yùn)算符的規(guī)則。對(duì)于整數(shù),結(jié)果和 (a // b, a % b) 一致。對(duì)于浮點(diǎn)數(shù),結(jié)果是 (q, a % b) ,q 通常是 math.floor(a / b) 但可能會(huì)比 1 小。在任何情況下, q * b + a % b 和 a 基本相等;如果 a % b 非零,它的符號(hào)和 b 一樣,并且 0 <= abs(a % b) < abs(b) 。
format(value[, format_spec])
將 value 轉(zhuǎn)換為 format_spec 控制的“格式化”表示。
hex(x)
將整數(shù)轉(zhuǎn)換為以“0x”為前綴的小寫十六進(jìn)制字符串。如果 x 不是 Python int 對(duì)象,則必須定義返回整數(shù)的?index() 方法。
oct(x)
將一個(gè)整數(shù)轉(zhuǎn)變?yōu)橐粋€(gè)前綴為“0o”的八進(jìn)制字符串。結(jié)果是一個(gè)合法的 Python 表達(dá)式。如果 x 不是 Python 的 int 對(duì)象,那它需要定義?index() 方法返回一個(gè)整數(shù)。
ord(c)
對(duì)表示單個(gè) Unicode 字符的字符串,返回代表它 Unicode 碼點(diǎn)的整數(shù)。例如 ord(‘a(chǎn)’) 返回整數(shù) 97, ord(‘€’) (歐元符合)返回 8364 。這是 chr() 的逆函數(shù)。
pow(x, y[, z])
返回 x 的 y 次冪;如果 z 存在,則對(duì) z 取余(比直接 pow(x, y) % z 計(jì)算更高效)。兩個(gè)參數(shù)形式的 pow(x, y) 等價(jià)于冪運(yùn)算符:?x**y。
round(number[, ndigits])
返回精確到小數(shù)點(diǎn)后ndigits精度的數(shù)。 如果省略ndigits或者為None,則返回其輸入的最接近的整數(shù)。
對(duì)于支持round()的內(nèi)置類型,值被舍入離前一位更近的一端(四舍六入); 如果距離兩端相等(5)則保留到偶數(shù)一邊。(例如,round(0.5)和round(-0.5)均為0,round(1.5)為2)。 任何整數(shù)值對(duì)ndigits(正數(shù),零或負(fù)數(shù))有效。如果省略ndigits或None,則返回值為整數(shù)。 否則返回值與number的類型相同。
對(duì)于一般的Python對(duì)象number,將代理舍入為number.__round__。
注釋:?round()對(duì)于浮點(diǎn)數(shù)的行為可能令人驚訝,比如,round(2.675, 2)得出2.67,而不是期望的2.68。這不是bug,這是因?yàn)榇蠖鄶?shù)十進(jìn)制小數(shù)不能準(zhǔn)確表示為二進(jìn)制的浮點(diǎn)數(shù)。
sum(iterable[, start])
從start開始由左到右累加可迭代的元素并返回總數(shù)。start默認(rèn)為0. iterable的項(xiàng)通常是數(shù)字,起始值不允許是字符串。
對(duì)于某些用例,sum()有很好的替代方法。 連接字符串序列的首選快速方法是調(diào)用"".join(sequence)。 要以擴(kuò)展精度累加浮點(diǎn)值,就用math.fsum()。要拼接一系列可迭代對(duì)象就考慮使用itertools.chain()。
可迭代操作all(iterable), any(iterable)
這兩個(gè)函數(shù),我們?cè)谇懊鎸W(xué)習(xí)list、dict等數(shù)據(jù)結(jié)構(gòu)時(shí)已經(jīng)多次學(xué)習(xí)。
all(): 如果iterable的所有元素都為真(或iterable為空)返回True;等價(jià)于:
def all(iterable): for item in iterable: if not item: return False return True
any():如果iterable的任一個(gè)元素為真則返回True。如果iterable為空,則返回False。等價(jià)于:
def any(iterable): for item in iterable: if item: return True return False
enumerate(iterable, start=0)
返回一個(gè)枚舉對(duì)象。iterable 必須是一個(gè)序列,或 iterator,或其他支持迭代的對(duì)象。 enumerate() 返回的迭代器的?next() 方法返回一個(gè)元組,里面包含一個(gè)計(jì)數(shù)值(從 start 開始,默認(rèn)為 0)和通過(guò)迭代 iterable 獲得的值。
In [4]: ll = ["a", "b", "c", "d"] In [5]: list(enumerate(ll)) Out[5]: [(0, "a"), (1, "b"), (2, "c"), (3, "d")] In [6]: list(enumerate(ll, start=1)) Out[6]: [(1, "a"), (2, "b"), (3, "c"), (4, "d")]
等價(jià)于:
def enumerate(sequence, start=0): n = start for elem in sequence: yield n, elem n += 1
filter(function, iterable)
用 iterable 中函數(shù) function 返回真的那些元素,構(gòu)建一個(gè)新的迭代器。iterable 可以是一個(gè)序列,一個(gè)支持迭代的容器,或一個(gè)迭代器。如果 function 是 None ,則會(huì)假設(shè)它是一個(gè)身份函數(shù),即 iterable 中所有返回假的元素會(huì)被移除。
請(qǐng)注意, filter(function, iterable) 相當(dāng)于一個(gè)生成器表達(dá)式,當(dāng) function 不是 None 的時(shí)候?yàn)?(item for item in iterable if function(item));function 是 None 的時(shí)候?yàn)?(item for item in iterable if item) 。
只有 function 返回 false 時(shí)才選取 iterable 中元素的補(bǔ)充函數(shù)。
map(function, iterable, …)
產(chǎn)生一個(gè)將 function 應(yīng)用于迭代器中所有元素并返回結(jié)果的迭代器。如果傳遞了額外的 iterable 實(shí)參,function 必須接受相同個(gè)數(shù)的實(shí)參,并使用所有迭代器中并行獲取的元素。當(dāng)有多個(gè)迭代器時(shí),最短的迭代器耗盡則整個(gè)迭代結(jié)束。如果函數(shù)的輸入已經(jīng)是元組實(shí)參,請(qǐng)參閱 itertools.starmap()。
zip(*iterables)
創(chuàng)建一個(gè)聚合來(lái)自每個(gè)可迭代的元素的迭代器。
返回元組的迭代器,其中第i個(gè)元組包含來(lái)自每個(gè)參數(shù)序列或迭代的第i個(gè)元素。當(dāng)最短輸入可迭代用盡時(shí),迭代器停止。使用單個(gè)iterable參數(shù),它返回一個(gè)1元組的迭代器。沒(méi)有參數(shù),它返回一個(gè)空迭代器。相當(dāng)于:
def zip(*iterables): # zip("ABCD", "xy") --> Ax By sentinel = object() iterators = [iter(it) for it in iterables] while iterators: result = [] for it in iterators: elem = next(it, sentinel) if elem is sentinel: return result.append(elem) yield tuple(result)
保證了迭代的從左到右的評(píng)估順序。 這使得使用zip(*[iter(s)]*n)將數(shù)據(jù)系列聚類成n長(zhǎng)度組的習(xí)慣成為可能。這會(huì)重復(fù)相同的迭代器n次,以便每個(gè)輸出元組具有n次調(diào)用迭代器的結(jié)果。這具有將輸入分成n長(zhǎng)度塊的效果。
當(dāng)你不關(guān)心較長(zhǎng)迭代的尾隨,不匹配的值時(shí),zip()只應(yīng)與不等長(zhǎng)度輸入一起使用。如果這些值很重要,請(qǐng)改用itertools.zip_longest()。
zip()與*運(yùn)算符一起用于解壓縮列表:
In [80]: a = [1, 2, 3] In [81]: b = ["a", "b", "c"] In [82]: zipped = zip(a, b) In [83]: list(zipped) Out[83]: [(1, "a"), (2, "b"), (3, "c")] In [84]: a2, b2 = zip(*zip(a, b)) In [85]: a == list(a2) and b == list(b2) Out[86]: True
max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
返回可迭代對(duì)象中最大的元素,或者返回兩個(gè)及以上實(shí)參中最大的。
如果只提供了一個(gè)位置參數(shù),它必須是非空 iterable,返回可迭代對(duì)象中最大的元素;如果提供了兩個(gè)及以上的位置參數(shù),則返回最大的位置參數(shù)。
有兩個(gè)可選只能用關(guān)鍵字的實(shí)參。key 實(shí)參指定排序函數(shù)用的參數(shù),如傳給 list.sort() 的。default 實(shí)參是當(dāng)可迭代對(duì)象為空時(shí)返回的值。如果可迭代對(duì)象為空,并且沒(méi)有給 default ,則會(huì)觸發(fā) ValueError。
如果有多個(gè)最大元素,則此函數(shù)將返回第一個(gè)找到的。這和其他穩(wěn)定排序工具如 sorted(iterable, key=keyfunc, reverse=True)[0] 和 heapq.nlargest(1, iterable, key=keyfunc) 保持一致。
min(iterable, *[, key, default])
min(arg1, arg2, *args[, key])
返回可迭代對(duì)象中最小的元素,或者返回兩個(gè)及以上實(shí)參中最小的。
如果只提供了一個(gè)位置參數(shù),它必須是 iterable,返回可迭代對(duì)象中最小的元素;如果提供了兩個(gè)及以上的位置參數(shù),則返回最小的位置參數(shù)。
有兩個(gè)可選只能用關(guān)鍵字的實(shí)參。key 實(shí)參指定排序函數(shù)用的參數(shù),如傳給 list.sort() 的。default 實(shí)參是當(dāng)可迭代對(duì)象為空時(shí)返回的值。如果可迭代對(duì)象為空,并且沒(méi)有給 default ,則會(huì)觸發(fā) ValueError。
如果有多個(gè)最小元素,則此函數(shù)將返回第一個(gè)找到的。這和其他穩(wěn)定排序工具如 sorted(iterable, key=keyfunc)[0] 和 heapq.nsmallest(1, iterable, key=keyfunc) 保持一致。
reversed(seq)
返回反向迭代器。seq必須是一個(gè)具有reversed()方法的對(duì)象,或者支持序列協(xié)議(len()方法和getitem()方法,整數(shù)參數(shù)從0開始)。
sorted(iterable, *, key=None, reverse=False)
從iterable中的項(xiàng)返回一個(gè)新的排序列表。
有兩個(gè)可選參數(shù),必須指定為關(guān)鍵字參數(shù)。
key指定一個(gè)參數(shù)的函數(shù),該函數(shù)用于從iterable中的每個(gè)元素中提取比較鍵(例如,key = str.lower)。默認(rèn)值為None(直接比較元素)。
reverse是一個(gè)布爾值。 如果設(shè)置為True,則列表元素將按照每個(gè)比較相反的方式進(jìn)行排序。
使用functools.cmp_to_key()將舊式cmp函數(shù)轉(zhuǎn)換為鍵函數(shù)。
內(nèi)置的sorted()函數(shù)保證穩(wěn)定。 如果排序保證不改變比較相等的元素的相對(duì)順序,則排序是穩(wěn)定的 – 這有助于多次傳遞排序(例如,按部門排序,然后按工資等級(jí)排序)。
iter(object[, sentinel])
返回一個(gè) iterator 對(duì)象。根據(jù)是否存在第二個(gè)實(shí)參,第一個(gè)實(shí)參的解釋是非常不同的。如果沒(méi)有第二個(gè)實(shí)參,object 必須是支持迭代協(xié)議(有?iter() 方法)的集合對(duì)象,或必須支持序列協(xié)議(有?getitem() 方法,且數(shù)字參數(shù)從 0 開始)。如果它不支持這些協(xié)議,會(huì)觸發(fā) TypeError。如果有第二個(gè)實(shí)參 sentinel,那么 object 必須是可調(diào)用的對(duì)象。這種情況下生成的迭代器,每次迭代調(diào)用它的?next() 方法時(shí)都會(huì)不帶實(shí)參地調(diào)用 object;如果返回的結(jié)果是 sentinel 則觸發(fā) StopIteration,否則返回調(diào)用結(jié)果。
next(iterator[, default])
通過(guò)調(diào)用 iterator 的?next() 方法獲取下一個(gè)元素。如果迭代器耗盡,則返回給定的 default,如果沒(méi)有默認(rèn)值則觸發(fā) StopIteration。
class?bool([x])
說(shuō)明:在文檔中,函數(shù)的參數(shù)用方括號(hào)[]括起來(lái)表示這個(gè)參數(shù)可有可無(wú)(在參數(shù)列表中)。
內(nèi)置類型,返回一個(gè)布爾值:True或者False。x使用標(biāo)注的真值測(cè)試過(guò)程來(lái)轉(zhuǎn)換,關(guān)于真值測(cè)試的知識(shí)可以再回顧一下前面我們關(guān)于布爾值的章節(jié)。
bool類是int的子類,這個(gè)bool類很特別,它不能被繼承,且只有True和False兩個(gè)實(shí)例。
class?bytearray([source[, encoding[, errors]]])
返回一個(gè)新的 bytes 數(shù)組。 bytearray 類是一個(gè)可變序列,包含范圍為 0 <= x < 256 的整數(shù)。它有可變序列大部分常見(jiàn)的方法,同時(shí)有 bytes 類型的大部分方法。
可選形參 source 可以用不同的方式來(lái)初始化數(shù)組:
如果是一個(gè) string,您必須提供 encoding 參數(shù)(errors 參數(shù)仍是可選的);bytearray() 會(huì)使用 str.encode() 方法來(lái)將 string 轉(zhuǎn)變成 bytes。
如果是一個(gè) integer,會(huì)初始化大小為該數(shù)字的數(shù)組,并使用 null 字節(jié)填充。
如果是一個(gè)符合 buffer 接口的對(duì)象,該對(duì)象的只讀 buffer 會(huì)用來(lái)初始化字節(jié)數(shù)組。
如果是一個(gè) iterable 可迭代對(duì)象,它的元素的范圍必須是 0 <= x < 256 的整數(shù),它會(huì)被用作數(shù)組的初始內(nèi)容。
如果沒(méi)有實(shí)參,則創(chuàng)建大小為 0 的數(shù)組。
class?bytes([source[, encoding[, errors]]])
返回一個(gè)新的“bytes”對(duì)象, 是一個(gè)不可變序列,包含范圍為 0 <= x < 256 的整數(shù)。bytes 是 bytearray 的不可變版本 – 它有其中不改變序列的方法和相同的索引、切片操作。
因此,構(gòu)造函數(shù)的實(shí)參和 bytearray() 相同。
class?complex([real[, imag]])
返回值為?real + imag*1j?的復(fù)數(shù),或?qū)⒆址驍?shù)字轉(zhuǎn)換為復(fù)數(shù)。如果第一個(gè)形參是字符串,則它被解釋為一個(gè)復(fù)數(shù),并且函數(shù)調(diào)用時(shí)必須沒(méi)有第二個(gè)形參。第二個(gè)形參不能是字符串。每個(gè)實(shí)參都可以是任意的數(shù)值類型(包括復(fù)數(shù))。如果省略了 imag,則默認(rèn)值為零,構(gòu)造函數(shù)會(huì)像 int 和 float 一樣進(jìn)行數(shù)值轉(zhuǎn)換。如果兩個(gè)實(shí)參都省略,則返回 0j。
注解?當(dāng)從字符串轉(zhuǎn)換時(shí),字符串在 + 或 – 的周圍必須不能有空格。例如 complex(‘1+2j’) 是合法的,但 complex(‘1 + 2j’) 會(huì)觸發(fā) ValueError 異常。
在 3.6 版更改: 您可以使用下劃線將代碼文字中的數(shù)字進(jìn)行分組。
class?float([x])
返回從數(shù)字或字符串 x 生成的浮點(diǎn)數(shù)。
如果實(shí)參是字符串,則它必須是包含十進(jìn)制數(shù)字的字符串,字符串前面可以有符號(hào),之前也可以有空格??蛇x的符號(hào)有 ‘+’ 和 ‘-‘ ; ‘+’ 對(duì)創(chuàng)建的值沒(méi)有影響。實(shí)參也可以是 NaN(非數(shù)字)、正負(fù)無(wú)窮大的字符串。
class int([x])
class int(x, base=10)
返回一個(gè)使用數(shù)字或字符串 x 生成的整數(shù)對(duì)象,或者沒(méi)有實(shí)參的時(shí)候返回 0 。如果 x 定義了?int(),int(x) 返回 x.int() 。如果 x 定義了?trunc(),它返回 x.trunc() 。對(duì)于浮點(diǎn)數(shù),它向零舍入。
如果 x 不是數(shù)字,或者有 base 參數(shù),x 必須是字符串、bytes、表示進(jìn)制為 base 的 整數(shù)文字 的 bytearray 實(shí)例。該文字前可以有 + 或 – (中間不能有空格),前后可以有空格。一個(gè)進(jìn)制為 n 的數(shù)字包含 0 到 n-1 的數(shù),其中 a 到 z (或 A 到 Z )表示 10 到 35。默認(rèn)的 base 為 10 ,允許的進(jìn)制有 0、2-36。2、8、16 進(jìn)制的數(shù)字可以在代碼中用 0b/0B 、 0o/0O 、 0x/0X 前綴來(lái)表示。進(jìn)制為 0 將安照代碼的字面量來(lái)精確解釋,最后的結(jié)果會(huì)是 2、8、10、16 進(jìn)制中的一個(gè)。所以 int(‘010’, 0) 是非法的,但 int(‘010’) 和 int(‘010’, 8) 是合法的。
class?str(object=”)
class?str(object=b”, encoding=’utf-8′, errors=’strict’)
返回一個(gè)str類型的對(duì)象。str是內(nèi)置字符串類
class?list([iterable])
除了是函數(shù),list 也是可變序列類型,詳情請(qǐng)參閱 列表 和 Sequence Types — list, tuple, range。
tuple([iterable])
元組是內(nèi)置的不可變序列類型。tuple()生成一個(gè)元組對(duì)象,可選參數(shù)iterable的元素將被加入到新元組。
class?dict(**kwarg)
class?dict(mapping, **kwarg)
class?dict(iterable, **kwarg)
創(chuàng)建一個(gè)新的字典。dict 對(duì)象是一個(gè)字典類
其他容器類型,請(qǐng)參見(jiàn)內(nèi)置的 list、set 和 tuple 類,以及 collections 模塊。
class?set([iterable])
返回一個(gè)set對(duì)象。可選參數(shù)iterable的元素將被加入新set對(duì)象里面。
class?frozenset([iterable])
返回一個(gè)新的 frozenset 對(duì)象,它包含可選參數(shù) iterable 中的元素。 frozenset 是一個(gè)內(nèi)置的類。
class?object
返回一個(gè)沒(méi)有特征的新對(duì)象。object 是所有類的基類。它具有所有 Python 類實(shí)例的通用方法。這個(gè)函數(shù)不接受任何實(shí)參。
注解 由于 object 沒(méi)有?dict,因此無(wú)法將任意屬性賦給 object 的實(shí)例。
class?range(stop)
class?range(start, stop[, step])
range其實(shí)是個(gè)不可變數(shù)字序列類型而不是一個(gè)函數(shù),通常用于在for循環(huán)中循環(huán)特定次數(shù)。
傳給range的實(shí)參必須是整數(shù)(或是內(nèi)置類型int,或是實(shí)現(xiàn)了index這個(gè)特殊方法的對(duì)象)。如果step參數(shù)省略了,則它默認(rèn)為1.如果start省略了則默認(rèn)為0。如果step為0,則報(bào)錯(cuò):ValueError。
如果step為整數(shù),range 的內(nèi)容決定于公式:r[i] = start + step*i,其中i >= 0, r[i] < stop。
如果step是負(fù)數(shù),range 的內(nèi)容仍決定于公式:r[i] = start + step*i,其中i >= 0, r[i] > stop。
如果r[0]不滿足值約束,則range對(duì)象將為空。 range確實(shí)支持負(fù)索引,但這些索引被解釋為從正索引確定的序列末尾開始的索引。
range被允許包含絕對(duì)值大于sys.maxsize的值,但是某些特性(如len())可能會(huì)報(bào)錯(cuò):OverflowError。
參看下面range的例子:
In [32]: list(range(9)) Out[32]: [0, 1, 2, 3, 4, 5, 6, 7, 8] In [33]: list(range(3,9)) Out[33]: [3, 4, 5, 6, 7, 8] In [34]: list(range(0, 20, 3)) Out[34]: [0, 3, 6, 9, 12, 15, 18] In [35]: list(range(0, -10, -1)) Out[35]: [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] In [36]: list(range(0)) Out[36]: [] In [37]: list(range(10, 0)) Out[37]: []
range類型比通常的list或tuple的優(yōu)點(diǎn)是,range對(duì)線下總是占用相同(小的)數(shù)量的內(nèi)存,不管它表示的范圍有多大。因?yàn)樗淮鎯?chǔ)start,stop和step的值,在需要的時(shí)候才計(jì)算多帶帶的元素或子范圍。
range對(duì)象實(shí)現(xiàn)了類似list或tuple序列的特性,比如包含測(cè)試,元素索引查找,切片和對(duì)負(fù)索引的支持。參見(jiàn)下面的例子:
In [43]: r = range(0, 10, 2) In [44]: r Out[44]: range(0, 10, 2) In [45]: 5 in r Out[45]: False In [46]: 6 in r Out[46]: True In [47]: r.index(8) Out[47]: 4 In [48]: r[3] Out[48]: 6 In [49]: r[:3] Out[49]: range(0, 6, 2) In [50]: r[-1] Out[50]: 8
通過(guò)==和!=測(cè)試兩個(gè)range對(duì)象的相等性是把它們當(dāng)做序列進(jìn)行比較。也就是說(shuō),如果兩個(gè)range對(duì)象表示相同的值的序列就認(rèn)為它們實(shí)時(shí)相等的。
注意:兩個(gè)range對(duì)象相等但可能含有不同的start,stop和step屬性,比如range(0) == range(2, 1, 1)或者range(0, 3, 2) == range(0, 4, 2)。
class?slice(stop)
class?slice(start, stop[, step])
返回一個(gè)切片對(duì)象,表示由range(start,stop,step)指定的索引集。start和step參數(shù)默認(rèn)為None。Slice對(duì)象具有只讀數(shù)據(jù)屬性start,stop和step,它們只返回參數(shù)值(或它們的默認(rèn)值)。他們沒(méi)有其他明確的功能;但是它們被Numerical Python和其他第三方擴(kuò)展使用。使用擴(kuò)展索引語(yǔ)法時(shí)也會(huì)生成切片對(duì)象。例如:a[start:stop:step]或a[start:stop,i]。
class?type(object)
class?type(name, bases, dict)
傳入一個(gè)參數(shù)object,則返回該對(duì)象的類型。返回值是一個(gè)type對(duì)象,通常和object.__class__返回的一樣。
建議使用isinstance()內(nèi)置函數(shù)來(lái)測(cè)試對(duì)象的類型,因?yàn)樗枰紤]子類。
使用三個(gè)參數(shù),返回一個(gè)新類型對(duì)象。 這實(shí)際上是類語(yǔ)句的動(dòng)態(tài)形式。 名稱字符串是類名,并成為name屬性; 基元元組列出基類并成為bases屬性; 并且dict字典是包含類主體定義的命名空間,并被復(fù)制到標(biāo)準(zhǔn)字典以成為dict屬性。 例如,以下兩個(gè)語(yǔ)句創(chuàng)建相同的類型對(duì)象:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43787.html
摘要:在中,并不是一個(gè)內(nèi)置函數(shù),而是一個(gè)類型,但是在中它是一個(gè)內(nèi)置函數(shù)上面是中從看到的的說(shuō)明,它的是,而不像內(nèi)置函數(shù)的是。雖然的類型從中的內(nèi)置函數(shù)變成了中的,但并不影響我們對(duì)它的使用。 循環(huán)是計(jì)算機(jī)程序中經(jīng)常用到的流程。試想一下,如果我們有一萬(wàn)個(gè)數(shù)據(jù)要處理,每個(gè)數(shù)據(jù)處理的流程都一模一樣,如果我們用順序流程就要把處理流程重復(fù)寫一萬(wàn)遍,是不是很累?而用for循環(huán)就簡(jiǎn)單多了。 showImg(ht...
摘要:正如我們前面舉的張三的例子那樣,不同命名空間中的名稱之間沒(méi)有任何關(guān)系。作用域作用域,是一個(gè)命名空間可直接發(fā)放完的代碼的文本區(qū)域。刪除也是如此,語(yǔ)句會(huì)從局部命名空間的引用中移除對(duì)的綁定。 命名空間和作用域的概念我們之前也提到過(guò),比如內(nèi)置函數(shù)globals(),函數(shù)中變量的作用域,模塊使用的import等等。這些可能讓我們對(duì)這兩個(gè)概念有了大致的理解。本節(jié)再詳細(xì)探討一下。 showImg(h...
摘要:計(jì)算列表所有元素的和,其元素類型必須是數(shù)值型的整數(shù)浮點(diǎn)數(shù)返回一個(gè)排序的列表,但并不改變?cè)斜?。只有列表所有元素為才返回。列表的?nèi)置方法前面我們說(shuō)的是語(yǔ)言的內(nèi)置函數(shù),這里我們講的是列表本身的內(nèi)置方法。 Python的基本數(shù)據(jù)類型有整數(shù),浮點(diǎn)數(shù),布爾,字符串,它們是最基本的數(shù)據(jù)。在實(shí)際編程中,我們要經(jīng)常組織由很多基本數(shù)據(jù)組成的集合,這些集合的不同組織方式就是:數(shù)據(jù)結(jié)構(gòu),今天講的是數(shù)據(jù)結(jié)構(gòu)中...
摘要:字典的創(chuàng)建字典可以通過(guò)或一對(duì)花括號(hào)創(chuàng)建一個(gè)空字典。方法是字典對(duì)象名稱加方括號(hào)括起來(lái)的鍵名,比如??兆值涞拈L(zhǎng)度是和類似于對(duì)列表的操作,不過(guò)這兩個(gè)函數(shù)檢驗(yàn)的是字典的鍵。修改了字典并沒(méi)有重新獲取,但是已經(jīng)反應(yīng)了變化,多了返回值的對(duì)象,。 字典(dict, dictionary的簡(jiǎn)寫)是Python中另一個(gè)非常重要的內(nèi)置數(shù)據(jù)類型,是Python中映射類型(Mapping Type),它把鍵(k...
閱讀 3337·2021-11-22 12:04
閱讀 2721·2019-08-29 13:49
閱讀 493·2019-08-26 13:45
閱讀 2255·2019-08-26 11:56
閱讀 1012·2019-08-26 11:43
閱讀 605·2019-08-26 10:45
閱讀 1279·2019-08-23 16:48
閱讀 2167·2019-08-23 16:07