国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

syoya / 703人閱讀

摘要:把具名元組以的形式返回,我們可以利用它來把元組里的信息友好地呈現(xiàn)出來。數(shù)組支持所有跟可變序列有關(guān)的操作,包括和。雙向隊列和其他形式的隊列類雙向隊列是一個線程安全可以快速從兩端添加或者刪除元素的數(shù)據(jù)類型。

列表表達式
>>> symbols = "$¢£¥€¤"
>>> codes = [ord(symbol) for symbol in symbols]
>>> codes
[36, 162, 163, 165, 8364, 164]
生成器表達式(節(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

_用來臨時擋住不要的對象
_, 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)
解包

可見在調(diào)用參數(shù)的時候使用*號可以自動解包

def add(x,y):
    print x+y
para = (1,2)
add(*para)

同理如果是兩個星號的話,就是帶有**號的字典,自動解包

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 屬性是一個包含這個類所有字段名稱的元組。
? 用 _make() 通過接受一個可迭代對象來生成這個類的一個實例,它
的作用跟 City(*delhi_data) 是一樣的。
? _asdict() 把具名元組以 collections.OrderedDict 的形式返
回,我們可以利用它來把元組里的信息友好地呈現(xiàn)出來。

列表或元組的方法和屬性(那些由object類支持的方法沒有

列出來) page 84

切片

為什么切片和區(qū)間會忽略最后一個元素

當只有最后一個位置信息時,我們也可以快速看出切片和區(qū)間里有
幾個元素:range(3) 和 my_list[:3] 都返回 3 個元素。

當起止位置信息都可見時,我們可以快速計算出切片和區(qū)間的長
度,用后一個數(shù)減去第一個下標(stop - start)即可。

這樣做也讓我們可以利用任意一個下標來把序列分割成不重疊的兩
部分,只要寫成 my_list[:x] 和 my_list[x:] 就可以了,如下所
示。

>>> l = [10, 20, 30, 40, 50, 60]
>>> l[:2] # 在下標2的地方分割
[10, 20]
>>> l[2:]
[30, 40, 50, 60]
>>> l[:3] # 在下標3的地方分割
[10, 20, 30]
>>> l[3:]
[40, 50, 60]
步進切片

對seq[start:stop:step] 進行求值的時候,Python 會調(diào)用
seq.__getitem__(slice(start, stop, step))。

+=

+= 背后的特殊方法是 iadd (用于“就地加法”)。但是如果一個類
沒有實現(xiàn)這個方法的話,Python 會退一步調(diào)用 add 。考

+= 的概念也適用于 *=,不同的是,后者相對應的
imul

好工具

Python Tutor(http://www.pythontutor.com)是一個對 Python 運行原理進行
可視化分析的工具。

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

一個只有一個參數(shù)的函數(shù),這個函數(shù)會被用在序列里的每一個元素
上,所產(chǎn)生的結(jié)果將是排序算法依賴的對比關(guān)鍵字。

reverse
如果被設(shè)定為 True,被排序的序列里的元素會以降序輸出

注意并不是簡單的把排序結(jié)果給反過來,是降序(按照之前的反排序)
數(shù)組

如果我們需要一個只包含數(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 用 起來很簡單。

用 array.fromfile 從一個二進制文件里讀出 1000 萬個 雙精度浮點數(shù)只需要 0.1 秒,

這比從文本文件里讀取的速度要快 60倍,因為后者會使用內(nèi)置的 float 方法把每一行文字轉(zhuǎn)換成浮點數(shù)。

列表和數(shù)組的屬性和方法 page110 NumPy 和 SciPy

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

雙向隊列和其他形式的隊列

collections.deque 類(雙向隊列)是一個線程安全、可以快速從兩
端添加或者刪除元素的數(shù)據(jù)類型。

>>> 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 是一個可選參數(shù),代表這個隊列可以容納的元素的數(shù)量
? 在尾部添加 3 個元素的操作會擠掉 -1、1 和 2。

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

列表表達式 和 生成器表達式(元祖省內(nèi)存)很好用

元祖的拆包十分神奇,尤其是*號的存在

具名元組的實例也很節(jié)省空間,有點像模擬字典使用,._asdict() 方法來把記錄變成 OrderedDict 類型

切片是基本用法,給切片賦值是個好的修改方式

+=

增量賦值 += 和 *= 會區(qū)別對待可變和不可變序列。

在遇到不可變序列時,這兩個操作會在背后生成新的序列。

但如果被賦值的對象是可變的,那么這個序列會就地修改

sorted 函數(shù),只需要一個比較方法key

純數(shù)字數(shù)組用 array.array比較好,NumPy 和 SciPy科學計算神奇世界

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41561.html

相關(guān)文章

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

    摘要:第一章數(shù)據(jù)類型隱式方法利用快速生成類方法方法通過下標找元素自動支持切片操作可迭代方法與如果是一個自定義類的對象,那么會自己去調(diào)用其中由你實現(xiàn)的方法。若返回,則會返回否則返回。一個對象沒有函數(shù),解釋器會用作為替代。 第一章 python數(shù)據(jù)類型 1 隱式方法 利用collections.namedtuple 快速生成類 import collections Card = collec...

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

    摘要:第一章數(shù)據(jù)類型隱式方法利用快速生成字典方法方法通過下標找元素自動支持切片操作可迭代方法與如果是一個自定義類的對象,那么會自己去調(diào)用其中由你實現(xiàn)的方法。若返回,則會返回否則返回。一個對象沒有函數(shù),解釋器會用作為替代。 第一章 python數(shù)據(jù)類型 1 隱式方法 利用collections.namedtuple 快速生成字典 import collections Card = coll...

    FullStackDeveloper 評論0 收藏0
  • 流暢python讀書筆記-第十章-繼承優(yōu)缺點

    摘要:繼承的優(yōu)缺點推出繼承的初衷是讓新手順利使用只有專家才能設(shè)計出來的框架。多重繼承的真實應用多重繼承能發(fā)揮積極作用。即便是單繼承,這個原則也能提升靈活性,因為子類化是一種緊耦合,而且較高的繼承樹容易倒。 繼承的優(yōu)缺點 推出繼承的初衷是讓新手順利使用只有專家才能設(shè)計出來的框架。——Alan Kay 子類化內(nèi)置類型很麻煩 (如 list 或 dict)) ,別搞這種 直接子類化內(nèi)置類型(如 ...

    morgan 評論0 收藏0
  • 流暢python讀書筆記-第四章 編碼問題

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

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

    摘要:可以通過定位參數(shù)和關(guān)鍵字參數(shù)傳入的形參多數(shù)函數(shù)的參數(shù)屬于此類。就像數(shù)據(jù)格式化一樣數(shù)據(jù)帶上標簽自行創(chuàng)建函數(shù)它會自行創(chuàng)建函數(shù)。創(chuàng)建的函數(shù)會在對象上調(diào)用參數(shù)指定的方法自己創(chuàng)建函數(shù)凍結(jié)參數(shù)這個高階函數(shù)用于部分應用一個函數(shù)。 高階函數(shù) 接受函數(shù)為參數(shù),或者把函數(shù)作為結(jié)果返回的函數(shù)是高階函數(shù) def reverse(word): return word[::-1] ...

    546669204 評論0 收藏0

發(fā)表評論

0條評論

syoya

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<