標籤:exce print 迴圈 int ict iterator enum catch bre
# 切片(擷取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 Iterableisinstance(‘abc‘, Iterable)
for i, value in enumerate([‘A‘,‘B‘,‘C‘]) : print(i, value)
for x,y in [(1,2), (3,4)] : print(x, y)
# 列表產生式(一句話產生需要的 list)
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‘]
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)
from collections import Iterator>>>isinstance([], Iterator)
產生器才是“迭代對象”,可以使用next
list、tuple、dict、set、str、產生器(generator)是“可迭代”對象,不能使用next
- Iterable轉化為Iterator,使用 iter()
isinstance(iter([]), Iterator)
迭代器因為是一種規則,所以理論上可以表示所有的整數。但是諸如 list 就不可以。
Python學習筆記4 進階特性_20170618