>>> 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 # 元組拆包python
不用中間變量交換值
b, a = a, bgit
_用來臨時擋住不要的對象
_, 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)
同理若是是兩個星號的話,就是帶有**號的字典,自動解包app
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)),
]dom
for name, cc, pop, (latitude, longitude) in metro_areas: # ➋
if longitude <= 0: # ➌
print(fmt.format(name, latitude, longitude))ssh
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
爲何切片和區間會忽略最後一個元素
>>> 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,被排序的序列裏的元素會以降序輸出
注意並非簡單的把排序結果給反過來,是降序(按照以前的反排序)
示例代碼
>>> 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
結論:
NumPy 和 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 和 2。
- 增量賦值 += 和 *= 會區別對待可變和不可變序列。
- 在遇到不可變序列時,這兩個操做會在背後生成新的序列。
- 但若是被賦值的對象是可變的,那麼這個序列會就地修改