→ zerof: zip是 generator, 只能用一次04/10 17:33
→ mikapauli: iterator不回頭。這是從functional programming來的04/10 19:25
→ zerof: .... fp 裡面有 iterator...? 樓上是認真的嗎04/10 19:42
→ uranusjr: 二樓說的應該是 generator, 不過仍然不太準確, 雖然這個04/10 21:26
→ uranusjr: 概念是從 functional programming languages 開始流行,04/10 21:26
→ uranusjr: 但本身與 functional programming 關係不大04/10 21:27
functional programming 跟 object-oriented programming 是
programming paradigm, iterator 是 software design pattern, 個人覺得 pattern
是從某個 paradigm 來的說法蠻詭異的。
→ mikapauli: python裡generator繼承自iterator04/11 14:12
→ mikapauli: 但zip不是generator吧04/11 14:14
→ mikapauli: zip也沒有send, throw, close等methods04/11 14:15
→ mikapauli: 至少我看ABC裡是這樣寫的04/11 14:16
→ s860134: generator iterator iterable 傻傻分不清04/12 08:47
collections.abc 是 Generator 最完整的定義,但其實最初 Generator 的實作是沒有
send, throw 跟 close 的(PEP255),這三個 methods 是為了 coroutine (PEP342) 而
新增的。
PEP 在寫作也常常把兩個詞混著用像 yield from 的定義(PEP380)是 delegating to a
subgenerator ,但它並不是用嚴格的 Generator 定義(.send(None)),而是用 next()
去實作。
另外,我記得沒錯的話 Python 的 Iterator 並不完全符合 Iterator pattern 的實作
定義。
其他可參考 wikipedia: Generator, Iterator, Iterator pattern, design pattern,
programming paradigm.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 192.19.253.250
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1491970544.A.E5A.html
推 CaptainH: pattern是隨人講的 04/12 16:54
推 mikapauli: 感謝說明! 04/12 17:52
→ uranusjr: 你有發現我第二推比第三推多一個英文字嗎 04/12 22:04
→ uranusjr: 另外 pattern 從 paradigm 來也不是詭異的事, 不同 04/12 22:05
→ uranusjr: paradigm 因為產生的各自需求與特性而演化出 pattern 並 04/12 22:06
→ uranusjr: 不是奇怪的歷程, 然後 pattern 再被廣義化用到其他地方 04/12 22:07
我認同 pattern 的確從 paradigm 萃取出來,但 iterator 是從 FP 來的這部份,我
持保留態度。應該說我完全沒聽過寫 FP 的人會說 "這裡用 iterator 來實作"之類的。
(又或者說寫 FP 的人根本不屑 Pattern 這回事)
我的想法很簡單就是: pattern 是處理資料的抽象概念,和 paradigm 之間的關係並
不明確。既然它是抽象的概念,要把它歸功於某個 paradigm 其實非常詭異。 這種立場
某層面省下和其他人爭論「某個 pattern 是抄哪個 paradigm 」的這種話題。
(能吵的已經夠多了不差這一個)
然後我回這篇的主要目的是說明 generator/iterator 在 Python 裡算是近似詞(?),
其他就是個人立場惹~ 不要找我吵架QQ
※ 編輯: zerof (122.100.76.218), 04/12/2017 22:52:45