成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

流暢的python讀書(shū)筆記-第二章Python 數(shù)據(jù)結(jié)構(gòu)

syoya / 709人閱讀

摘要:把具名元組以的形式返回,我們可以利用它來(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)。

列表或元組的方法和屬性(那些由object類(lèi)支持的方法沒(mé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)行
可視化分析的工具。

內(nèi)置函數(shù)sorted

一個(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 和 SciPy

NumPy 和 SciPy 提供的高階數(shù)組和矩陣操作,Python 成為科學(xué)計(jì)
算應(yīng)用的主流語(yǔ)言。

雙向隊(duì)列和其他形式的隊(duì)列

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。

列表和雙向隊(duì)列 page 119 小總結(jié)

列表表達(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

相關(guān)文章

  • 流暢python讀書(shū)筆記-第一章Python 數(shù)據(jù)模型

    摘要:第一章數(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...

    tomener 評(píng)論0 收藏0
  • 流暢python讀書(shū)筆記-第一章Python 數(shù)據(jù)模型

    摘要:第一章數(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...

    FullStackDeveloper 評(píng)論0 收藏0
  • 流暢python讀書(shū)筆記-第十章-繼承優(yōu)缺點(diǎn)

    摘要:繼承的優(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)型(如 ...

    morgan 評(píng)論0 收藏0
  • 流暢python讀書(shū)筆記-第四章 編碼問(wèn)題

    摘要:處理文本的最佳實(shí)踐是三明治要盡早把輸入例如讀取文件時(shí)的字節(jié)序列解碼成字符串。這種三明治中的肉片是程序的業(yè)務(wù)邏輯,在這里只能處理字符串對(duì)象。 處理文本的最佳實(shí)踐是Unicode 三明治 要盡早把輸入(例如讀取文件時(shí))的字節(jié)序列解碼成字符串。 這種三明治中的肉片是程序的業(yè)務(wù)邏輯,在這里只能處理字符串對(duì)象。 在其他處理過(guò)程中,一定不能編碼或解碼。 對(duì)輸出來(lái)說(shuō),則要盡量晚地把字符串編碼成字...

    leone 評(píng)論0 收藏0
  • 流暢python讀書(shū)筆記-第五章 一等函數(shù)

    摘要:可以通過(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] ...

    546669204 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<