看板 Python 關於我們 聯絡資訊
推文裡面的東西太多了,拉出來討論
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