迭代器總結
##1. 迭代器
1.1 迭代
通過迭代器不斷取出可迭代物件中的下一個元素的值 的過程
for
1.2 可迭代物件
能能被迭代的物件
from collections import Utterable
isinstance(物件, Iterable)
實現 __iter__提供迭代器
1.3 迭代器
迭代的訪問 可迭代物件中的下一個元素
應用場景: 使用者只需要關心如何使用迭代器訪問資料 而不需要關鍵資料該如何訪問
解耦合
每一種可迭代物件都會提供對應的迭代器
from collections import Iterator
isinstance(物件,Iterator)
實現
__next__提供下一個元素的值
__iter__返回自身即可 應對情況 迭代器 = iter(迭代器)
1.4 next函式 iter函式
iter函式 迭代器 = iter(可迭代物件)
取出可迭代物件中提供的迭代器
next函式 下一個元素的值 = next(迭代器)
通過迭代器取出下一個元素的值
2. 生成器
是一種特殊的迭代器, 支援迭代器所有的操作
2.1. 生成器表示式
列表推導式[] ——> ()
優點: 節約資源, 不用佔用大量空間
在使用者需要訪問資料的時候 才延遲產生
2.2 生成器函式
含有yield關鍵字的函式 不再是普通函式 而是生成器函式
2.3 yield關鍵字作用
1 執行到yield會暫停當前程式碼執行 將後面的值返回到呼叫生成器程式碼的地方
2 當前生成器程式碼再次執行時 直接從上次暫停的地方繼續往下執行
##3. 協程
3.1 概念
協程是 使用者層面的多工排程機制 數量可以幾十萬
程序執行緒是操作系統層面的多工機制 數量受作業系統的限制
瞭解greenlet / yield使用協程
掌握gevent模組的使用
###3.2 gevent模式
建立啟動協程 協程物件 = gevent.spawn(入口, 引數列表)
等待協程完成 協程物件.join()
等待多個協程完成 gevent.joinall()
自動切換 from gevent import monkey; monkey.patch_all()
###3.3 多工的選擇
資源消耗不關心 要求穩定 使用者多程序
資源消耗關心 多執行緒或者協程
多工的網路程式 建議優先使用協程