摘要:把具名元組以的形式返回,我們可以利用它來(lái)把元組里的信息友好地呈現(xiàn)出來(lái)。數(shù)組支持所有跟可變序列有關(guān)的操作,包括和。雙向隊(duì)列和其他形式的隊(duì)列類(lèi)雙向隊(duì)列是一個(gè)線(xiàn)程安全可以快速?gòu)膬啥颂砑踊蛘邉h除元素的數(shù)據(jù)類(lèi)型。
列表表達(dá)式
>>> symbols = "$¢£¥€¤" >>> codes = [ord(symbol) for symbol in symbols] >>> codes [36, 162, 163, 165, 8364, 164]生成器表達(dá)式(節(jié)省內(nèi)存)
>>> symbols = "$¢£¥€¤" >>> tuple(ord(symbol) for symbol in symbols) ? (36, 162, 163, 165, 8364, 164) >>> import array >>> array.array("I", (ord(symbol) for symbol in symbols)) ? array("I", [36, 162, 163, 165, 8364, 164])元素拆包
latitude, longitude = lax_coordinates # 元組拆包
不用中間變量交換值
b, a = a, b
_用來(lái)臨時(shí)擋住不要的對(duì)象
_, filename = os.path.split("/home/luciano/.ssh/idrsa.pub")
平行賦值
>>> a, b, *rest = range(5) >>> a, b, rest (0, 1, [2, 3, 4]) >>> a, b, *rest = range(3) >>> a, b, rest (0, 1, [2]) >>> a, b, *rest = range(2) >>> a, b, rest (0, 1, []) # 任意位置 >>> a, *body, c, d = range(5) >>> a, body, c, d (0, [1, 2], 3, 4) >>> *head, b, c, d = range(5) >>> head, b, c, d ([0, 1], 2, 3, 4)解包
可見(jiàn)在調(diào)用參數(shù)的時(shí)候使用*號(hào)可以自動(dòng)解包
def add(x,y): print x+y para = (1,2) add(*para)
同理如果是兩個(gè)星號(hào)的話(huà),就是帶有**號(hào)的字典,自動(dòng)解包
def add(x,y): print x+y kkwd = {"x" :1,"y":2} add(**kkwd)
嵌套元素拆包
metro_areas = [
("Tokyo","JP",36.933,(35.689722,139.691667)), # ?
("Delhi NCR", "IN", 21.935, (28.613889, 77.208889)),
("Mexico City", "MX", 20.142, (19.433333, -99.133333)),
("New York-Newark", "US", 20.104, (40.808611, -74.020386)),
("Sao Paulo", "BR", 19.649, (-23.547778, -46.635833)),
]
for name, cc, pop, (latitude, longitude) in metro_areas: # ?
if longitude <= 0: # ?
print(fmt.format(name, latitude, longitude))
Card = collections.namedtuple("Card", ["rank", "suit"])
>>> City._fields ? ("name", "country", "population", "coordinates") >>> LatLong = namedtuple("LatLong", "lat long") >>> delhi_data = ("Delhi NCR", "IN", 21.935, LatLong(28.613889, 77.208889)) >>> delhi = City._make(delhi_data) ? >>> delhi._asdict() ? OrderedDict([("name", "Delhi NCR"), ("country", "IN"), ("population", 21.935), ("coordinates", LatLong(lat=28.613889, long=77.208889))]) >>> for key, value in delhi._asdict().items(): print(key + ":", value) name: Delhi NCR country: IN population: 21.935 coordinates: LatLong(lat=28.613889, long=77.208889) >>>
? _fields 屬性是一個(gè)包含這個(gè)類(lèi)所有字段名稱(chēng)的元組。
? 用 _make() 通過(guò)接受一個(gè)可迭代對(duì)象來(lái)生成這個(gè)類(lèi)的一個(gè)實(shí)例,它
的作用跟 City(*delhi_data) 是一樣的。
? _asdict() 把具名元組以 collections.OrderedDict 的形式返
回,我們可以利用它來(lái)把元組里的信息友好地呈現(xiàn)出來(lái)。
列出來(lái)) page 84
切片為什么切片和區(qū)間會(huì)忽略最后一個(gè)元素
當(dāng)只有最后一個(gè)位置信息時(shí),我們也可以快速看出切片和區(qū)間里有
幾個(gè)元素:range(3) 和 my_list[:3] 都返回 3 個(gè)元素。
當(dāng)起止位置信息都可見(jiàn)時(shí),我們可以快速計(jì)算出切片和區(qū)間的長(zhǎng)
度,用后一個(gè)數(shù)減去第一個(gè)下標(biāo)(stop - start)即可。
這樣做也讓我們可以利用任意一個(gè)下標(biāo)來(lái)把序列分割成不重疊的兩
部分,只要寫(xiě)成 my_list[:x] 和 my_list[x:] 就可以了,如下所
示。
>>> l = [10, 20, 30, 40, 50, 60] >>> l[:2] # 在下標(biāo)2的地方分割 [10, 20] >>> l[2:] [30, 40, 50, 60] >>> l[:3] # 在下標(biāo)3的地方分割 [10, 20, 30] >>> l[3:] [40, 50, 60]步進(jìn)切片
對(duì)seq[start:stop:step] 進(jìn)行求值的時(shí)候,Python 會(huì)調(diào)用
seq.__getitem__(slice(start, stop, step))。
+= 背后的特殊方法是 iadd (用于“就地加法”)。但是如果一個(gè)類(lèi)
沒(méi)有實(shí)現(xiàn)這個(gè)方法的話(huà),Python 會(huì)退一步調(diào)用 add ???/p>
+= 的概念也適用于 *=,不同的是,后者相對(duì)應(yīng)的
是 imul
Python Tutor(http://www.pythontutor.com)是一個(gè)對(duì) Python 運(yùn)行原理進(jìn)行
可視化分析的工具。
一個(gè)只有一個(gè)參數(shù)的函數(shù),這個(gè)函數(shù)會(huì)被用在序列里的每一個(gè)元素
上,所產(chǎn)生的結(jié)果將是排序算法依賴(lài)的對(duì)比關(guān)鍵字。
reverse
如果被設(shè)定為 True,被排序的序列里的元素會(huì)以降序輸出
注意并不是簡(jiǎn)單的把排序結(jié)果給反過(guò)來(lái),是降序(按照之前的反排序)數(shù)組
如果我們需要一個(gè)只包含數(shù)字的列表,那么 array.array 比 list 更高效。
數(shù)組支持所有跟可變序列有關(guān)的操作,包括 .pop、.insert 和.extend。
另外,數(shù)組還提供從文件讀取和存入文件的更快的方法,如.frombytes 和 .tofile。
示例代碼
>>> from array import array ? >>> from random import random >>> floats = array("d", (random() for i in range(10**7))) ? >>> floats[-1] ? 0.07802343889111107 >>> fp = open("floats.bin", "wb") >>> floats.tofile(fp) ? >>> fp.close() >>> floats2 = array("d") ? >>> fp = open("floats.bin", "rb") >>> floats2.fromfile(fp, 10**7) ? >>> fp.close() >>> floats2[-1] ? 0.07802343889111107 >>> floats2 == floats ? True
結(jié)論:
array.tofile 和 array.fromfile 用 起來(lái)很簡(jiǎn)單。
用 array.fromfile 從一個(gè)二進(jìn)制文件里讀出 1000 萬(wàn)個(gè) 雙精度浮點(diǎn)數(shù)只需要 0.1 秒,
這比從文本文件里讀取的速度要快 60倍,因?yàn)楹笳邥?huì)使用內(nèi)置的 float 方法把每一行文字轉(zhuǎn)換成浮點(diǎn)數(shù)。
列表和數(shù)組的屬性和方法 page110 NumPy 和 SciPyNumPy 和 SciPy 提供的高階數(shù)組和矩陣操作,Python 成為科學(xué)計(jì)
算應(yīng)用的主流語(yǔ)言。
collections.deque 類(lèi)(雙向隊(duì)列)是一個(gè)線(xiàn)程安全、可以快速?gòu)膬?br>端添加或者刪除元素的數(shù)據(jù)類(lèi)型。
>>> from collections import deque >>> dq = deque(range(10), maxlen=10) ? >>> dq deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10) >>> dq.rotate(3) ? >>> dq deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10) >>> dq.rotate(-4) >>> dq deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10) >>> dq.appendleft(-1) ? >>> dq deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10) >>> dq.extend([11, 22, 33]) ? >>> dq deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33], maxlen=10) >>> dq.extendleft([10, 20, 30, 40]) ? >>> dq deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8], maxlen=10)
? maxlen 是一個(gè)可選參數(shù),代表這個(gè)隊(duì)列可以容納的元素的數(shù)量
? 在尾部添加 3 個(gè)元素的操作會(huì)擠掉 -1、1 和 2。
列表表達(dá)式 和 生成器表達(dá)式(元祖省內(nèi)存)很好用
元祖的拆包十分神奇,尤其是*號(hào)的存在
具名元組的實(shí)例也很節(jié)省空間,有點(diǎn)像模擬字典使用,._asdict() 方法來(lái)把記錄變成 OrderedDict 類(lèi)型
切片是基本用法,給切片賦值是個(gè)好的修改方式
+=
增量賦值 += 和 *= 會(huì)區(qū)別對(duì)待可變和不可變序列。
在遇到不可變序列時(shí),這兩個(gè)操作會(huì)在背后生成新的序列。
但如果被賦值的對(duì)象是可變的,那么這個(gè)序列會(huì)就地修改
sorted 函數(shù),只需要一個(gè)比較方法key
純數(shù)字?jǐn)?shù)組用 array.array比較好,NumPy 和 SciPy科學(xué)計(jì)算神奇世界
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41561.html
摘要:第一章數(shù)據(jù)類(lèi)型隱式方法利用快速生成類(lèi)方法方法通過(guò)下標(biāo)找元素自動(dòng)支持切片操作可迭代方法與如果是一個(gè)自定義類(lèi)的對(duì)象,那么會(huì)自己去調(diào)用其中由你實(shí)現(xiàn)的方法。若返回,則會(huì)返回否則返回。一個(gè)對(duì)象沒(méi)有函數(shù),解釋器會(huì)用作為替代。 第一章 python數(shù)據(jù)類(lèi)型 1 隱式方法 利用collections.namedtuple 快速生成類(lèi) import collections Card = collec...
摘要:第一章數(shù)據(jù)類(lèi)型隱式方法利用快速生成字典方法方法通過(guò)下標(biāo)找元素自動(dòng)支持切片操作可迭代方法與如果是一個(gè)自定義類(lèi)的對(duì)象,那么會(huì)自己去調(diào)用其中由你實(shí)現(xiàn)的方法。若返回,則會(huì)返回否則返回。一個(gè)對(duì)象沒(méi)有函數(shù),解釋器會(huì)用作為替代。 第一章 python數(shù)據(jù)類(lèi)型 1 隱式方法 利用collections.namedtuple 快速生成字典 import collections Card = coll...
摘要:繼承的優(yōu)缺點(diǎn)推出繼承的初衷是讓新手順利使用只有專(zhuān)家才能設(shè)計(jì)出來(lái)的框架。多重繼承的真實(shí)應(yīng)用多重繼承能發(fā)揮積極作用。即便是單繼承,這個(gè)原則也能提升靈活性,因?yàn)樽宇?lèi)化是一種緊耦合,而且較高的繼承樹(shù)容易倒。 繼承的優(yōu)缺點(diǎn) 推出繼承的初衷是讓新手順利使用只有專(zhuān)家才能設(shè)計(jì)出來(lái)的框架?!狝lan Kay 子類(lèi)化內(nèi)置類(lèi)型很麻煩 (如 list 或 dict)) ,別搞這種 直接子類(lèi)化內(nèi)置類(lèi)型(如 ...
摘要:處理文本的最佳實(shí)踐是三明治要盡早把輸入例如讀取文件時(shí)的字節(jié)序列解碼成字符串。這種三明治中的肉片是程序的業(yè)務(wù)邏輯,在這里只能處理字符串對(duì)象。 處理文本的最佳實(shí)踐是Unicode 三明治 要盡早把輸入(例如讀取文件時(shí))的字節(jié)序列解碼成字符串。 這種三明治中的肉片是程序的業(yè)務(wù)邏輯,在這里只能處理字符串對(duì)象。 在其他處理過(guò)程中,一定不能編碼或解碼。 對(duì)輸出來(lái)說(shuō),則要盡量晚地把字符串編碼成字...
摘要:可以通過(guò)定位參數(shù)和關(guān)鍵字參數(shù)傳入的形參多數(shù)函數(shù)的參數(shù)屬于此類(lèi)。就像數(shù)據(jù)格式化一樣數(shù)據(jù)帶上標(biāo)簽自行創(chuàng)建函數(shù)它會(huì)自行創(chuàng)建函數(shù)。創(chuàng)建的函數(shù)會(huì)在對(duì)象上調(diào)用參數(shù)指定的方法自己創(chuàng)建函數(shù)凍結(jié)參數(shù)這個(gè)高階函數(shù)用于部分應(yīng)用一個(gè)函數(shù)。 高階函數(shù) 接受函數(shù)為參數(shù),或者把函數(shù)作為結(jié)果返回的函數(shù)是高階函數(shù) def reverse(word): return word[::-1] ...
閱讀 1289·2021-11-11 16:55
閱讀 1551·2021-10-08 10:16
閱讀 1209·2021-09-26 10:20
閱讀 3591·2021-09-01 10:47
閱讀 2470·2019-08-30 15:52
閱讀 2697·2019-08-30 13:18
閱讀 3207·2019-08-30 13:15
閱讀 1145·2019-08-30 10:55