1. 程式人生 > >迭代器總結

迭代器總結

##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 多工的選擇

​ 資源消耗不關心 要求穩定 使用者多程序

​ 資源消耗關心 多執行緒或者協程

​ 多工的網路程式 建議優先使用協程