迭代器致开、可迭代對象:
- 我們把可以通過for...in...這類語句迭代讀取一條數(shù)據(jù)供我們使用的對象稱之為可迭代對象(Iterable)
- 一個具備了__iter__方法的對象绷跑,就是一個可迭代對象
- 一個實現(xiàn)了__iter__方法和__next__方法的對象宾毒,就是迭代器
- list鸣峭、tuple等都是可迭代對象前普,我們可以通過iter()函數(shù)獲取這些可迭代對象的迭代器肚邢。然后我們可以對獲取到的迭代器不斷使用next()函數(shù)來獲取下一條數(shù)據(jù)
生成器
- 只要在def中有yield關(guān)鍵字的 就稱為生成器
- 使用了yield關(guān)鍵字的函數(shù)不再是函數(shù),而是生成器拭卿。(使用了yield的函數(shù)就是生成器)
- yield關(guān)鍵字有兩點作用:
- 保存當(dāng)前運行狀態(tài)(斷點)骡湖,然后暫停執(zhí)行,即將生成器(函數(shù))掛起
- 將yield關(guān)鍵字后面表達式的值作為返回值返回记劈,此時可以理解為起到了return的作用
- 可以使用next()函數(shù)讓生成器從斷點處繼續(xù)執(zhí)行勺鸦,即喚醒生成器(函數(shù))
進程、線程目木、協(xié)程區(qū)別
- 進程是資源分配的單位
- 線程是操作系統(tǒng)調(diào)度的單位
- 進程切換需要的資源很最大换途,效率很低
- 線程切換需要的資源一般,效率一般(當(dāng)然了在不考慮GIL的情況下)
- 協(xié)程切換任務(wù)資源很小刽射,效率高
- 多進程军拟、多線程根據(jù)cpu核數(shù)不一樣可能是并行的,但是協(xié)程是在一個線程中 所以是并發(fā)