摘要:把具名元組以的形式返回,我們可以利用它來把元組里的信息友好地呈現出來。數組支持所有跟可變序列有關的操作,包括和。雙向隊列和其他形式的隊列類雙向隊列是一個線程安全可以快速從兩端添加或者刪除元素的數據類型。
列表表達式
>>> symbols = "$¢£¥€¤" >>> codes = [ord(symbol) for symbol in symbols] >>> codes [36, 162, 163, 165, 8364, 164]生成器表達式(節省內存)
>>> 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)解包
可見在調用參數的時候使用*號可以自動解包
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 的形式返
回,我們可以利用它來把元組里的信息友好地呈現出來。
列出來) page 84
切片為什么切片和區間會忽略最后一個元素
當只有最后一個位置信息時,我們也可以快速看出切片和區間里有
幾個元素:range(3) 和 my_list[:3] 都返回 3 個元素。
當起止位置信息都可見時,我們可以快速計算出切片和區間的長
度,用后一個數減去第一個下標(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 會調用
seq.__getitem__(slice(start, stop, step))。
+= 背后的特殊方法是 iadd (用于“就地加法”)。但是如果一個類
沒有實現這個方法的話,Python 會退一步調用 add 。考
+= 的概念也適用于 *=,不同的是,后者相對應的
是 imul
Python Tutor(http://www.pythontutor.com)是一個對 Python 運行原理進行
可視化分析的工具。
一個只有一個參數的函數,這個函數會被用在序列里的每一個元素
上,所產生的結果將是排序算法依賴的對比關鍵字。
reverse
如果被設定為 True,被排序的序列里的元素會以降序輸出
注意并不是簡單的把排序結果給反過來,是降序(按照之前的反排序)數組
如果我們需要一個只包含數字的列表,那么 array.array 比 list 更高效。
數組支持所有跟可變序列有關的操作,包括 .pop、.insert 和.extend。
另外,數組還提供從文件讀取和存入文件的更快的方法,如.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
結論:
array.tofile 和 array.fromfile 用 起來很簡單。
用 array.fromfile 從一個二進制文件里讀出 1000 萬個 雙精度浮點數只需要 0.1 秒,
這比從文本文件里讀取的速度要快 60倍,因為后者會使用內置的 float 方法把每一行文字轉換成浮點數。
列表和數組的屬性和方法 page110 NumPy 和 SciPyNumPy 和 SciPy 提供的高階數組和矩陣操作,Python 成為科學計
算應用的主流語言。
collections.deque 類(雙向隊列)是一個線程安全、可以快速從兩
端添加或者刪除元素的數據類型。
>>> 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 是一個可選參數,代表這個隊列可以容納的元素的數量
? 在尾部添加 3 個元素的操作會擠掉 -1、1 和 2。
列表表達式 和 生成器表達式(元祖省內存)很好用
元祖的拆包十分神奇,尤其是*號的存在
具名元組的實例也很節省空間,有點像模擬字典使用,._asdict() 方法來把記錄變成 OrderedDict 類型
切片是基本用法,給切片賦值是個好的修改方式
+=
增量賦值 += 和 *= 會區別對待可變和不可變序列。
在遇到不可變序列時,這兩個操作會在背后生成新的序列。
但如果被賦值的對象是可變的,那么這個序列會就地修改
sorted 函數,只需要一個比較方法key
純數字數組用 array.array比較好,NumPy 和 SciPy科學計算神奇世界
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41561.html
摘要:第一章數據類型隱式方法利用快速生成類方法方法通過下標找元素自動支持切片操作可迭代方法與如果是一個自定義類的對象,那么會自己去調用其中由你實現的方法。若返回,則會返回否則返回。一個對象沒有函數,解釋器會用作為替代。 第一章 python數據類型 1 隱式方法 利用collections.namedtuple 快速生成類 import collections Card = collec...
摘要:第一章數據類型隱式方法利用快速生成字典方法方法通過下標找元素自動支持切片操作可迭代方法與如果是一個自定義類的對象,那么會自己去調用其中由你實現的方法。若返回,則會返回否則返回。一個對象沒有函數,解釋器會用作為替代。 第一章 python數據類型 1 隱式方法 利用collections.namedtuple 快速生成字典 import collections Card = coll...
摘要:繼承的優缺點推出繼承的初衷是讓新手順利使用只有專家才能設計出來的框架。多重繼承的真實應用多重繼承能發揮積極作用。即便是單繼承,這個原則也能提升靈活性,因為子類化是一種緊耦合,而且較高的繼承樹容易倒。 繼承的優缺點 推出繼承的初衷是讓新手順利使用只有專家才能設計出來的框架。——Alan Kay 子類化內置類型很麻煩 (如 list 或 dict)) ,別搞這種 直接子類化內置類型(如 ...
摘要:處理文本的最佳實踐是三明治要盡早把輸入例如讀取文件時的字節序列解碼成字符串。這種三明治中的肉片是程序的業務邏輯,在這里只能處理字符串對象。 處理文本的最佳實踐是Unicode 三明治 要盡早把輸入(例如讀取文件時)的字節序列解碼成字符串。 這種三明治中的肉片是程序的業務邏輯,在這里只能處理字符串對象。 在其他處理過程中,一定不能編碼或解碼。 對輸出來說,則要盡量晚地把字符串編碼成字...
摘要:可以通過定位參數和關鍵字參數傳入的形參多數函數的參數屬于此類。就像數據格式化一樣數據帶上標簽自行創建函數它會自行創建函數。創建的函數會在對象上調用參數指定的方法自己創建函數凍結參數這個高階函數用于部分應用一個函數。 高階函數 接受函數為參數,或者把函數作為結果返回的函數是高階函數 def reverse(word): return word[::-1] ...
閱讀 1239·2021-11-11 16:55
閱讀 1537·2021-10-08 10:16
閱讀 1188·2021-09-26 10:20
閱讀 3569·2021-09-01 10:47
閱讀 2451·2019-08-30 15:52
閱讀 2682·2019-08-30 13:18
閱讀 3194·2019-08-30 13:15
閱讀 1115·2019-08-30 10:55