Python學習筆記4 高級特性_20170618
阿新 • • 發佈:2017-06-18
don 全部 one cat rate for 切片 表示 ict
# 切片(獲取list / tuple / 字符串 中指定的元素)
l = list(range(10)) l[0:3] l[:3] # 0可以省略 l[:] # 全部 l[3:] # 最後的可以省略 l[-2:-1] # 負數下標,見python筆記2中介紹 l[-10:] # 取最後10個數 l[::2] # 所有數,每個兩個取出
# 叠代
- 通過 for ... in ...
- 可叠代對象:list、tuple、字符串已經在pythonb筆記2中提到了。
- 判斷是否可叠代
from collections import Iterable isinstance(‘abc‘, Iterable)
- 將 list 轉化成可以使用下標操作
for i, value in enumerate([‘A‘,‘B‘,‘C‘]) : print(i, value)
- 同時引用兩個變量
for x,y in [(1,2), (3,4)] : print(x, y)
# 列表生成式(一句話生成需要的 list)
- range
list(range(2,10))
- 通用方法
[x*x for x in range(1,10)] [x*x for x in range(1,10) if x%2 == 0] [m+n for m in ‘ABCD‘ for n in ‘12345‘]
- dict 情況
d = {‘x‘:‘A‘, ‘y‘:‘B‘} >>>[k+‘=‘+c for k,v in d.items()] [‘x=A‘, ‘y=B‘]
# 生成器(得到的是“函數”規則,而非結果)
- 列表生產式相關(將中括號改成小括號)
g = (x*x for x in range(10)) >>>next(g) # 獲得生成器的結果
- 函數相關(在需要停的位置添加yield,比如改 print 為 yield)
# 函數 def dplist(l) : for sub in l : print(sub) return ‘done‘ # 生成器 def dplist(l) : for sub in l : yield(sub) return ‘done‘
添加了 yield 的地方更像是一個函數的運行斷點,每次運行都是承接上次的運行結果。不會循環,到末了就會報終止錯誤,該錯誤可以catch
- 捕獲錯誤
>>>def dplist() : for sub in range(10) : yield(sub) return ‘done‘ >>>g = dplist()
>>>while True: try: x=next(g) print(‘g = ‘, x) except StopIteration as e: print(‘Genearator return vaue : ‘, e.value) break
# 叠代器
可以用於for循環的:list、tuple、dict、set、str、生成器(generator)等
- 以上可以直接作用於 for 的,稱為“可叠代對象”(Iterable)
判斷方法
from collections import Iterable >>>isinstance([], Iterable)
- “叠代器對象”(Iterator)
from collections import Iterator >>>isinstance([], Iterator)
生成器才是“叠代對象”,可以使用next
list、tuple、dict、set、str、生成器(generator)是“可叠代”對象,不能使用next
- Iterable轉化為Iterator,使用 iter()
isinstance(iter([]), Iterator)
- 叠代器什麽用:
叠代器因為是一種規則,所以理論上可以表示所有的整數。但是諸如 list 就不可以。
Python學習筆記4 高級特性_20170618