Python 知識點記錄——高階特性
阿新 • • 發佈:2019-01-04
用於記錄知識點,有錯誤歡迎指正
列表生成式:
用於建立list
[x * x for x in range(1, 11)] [x * x for x in range(1, 11) if x % 2 == 0] [{m: n} for m in 'ABC' for n in 'XYZ']
生成器:
返回的可迭代物件
1、列表生成式[]換成()
L = [x * x for x in range(1, 11)]
g = (x * x for x in range(1, 11)) # 生成器:可迭代物件,每次執行獲取下一個返回值,for迴圈
2、生成器函式
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return 'done'
遇到yield語句返回值一個,再次執行時,從上次返回的yield語句處繼續執行, for迴圈
for i in fib(6)
迭代器:
可以直接作用於for迴圈的物件統稱為可迭代物件
可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器
生成器都是迭代器物件,但list、dict、str是可迭代物件,確不是迭代器。(為什麼?迭代器物件是一個數據流,可以被next()函式不斷的返回下一個資料,直到沒有資料丟擲錯誤。可以看作是有序的序列,但不知道序列長度。迭代器物件是惰性的,只有在需要返回下一個資料時它才會計算。而list永遠不可能是無限的。不對請指出:惰性計算的序列都是迭代器
可迭代物件可以通過 iter() 函式獲得一個迭代器物件