Re: [問題] for 迴圈取完值,原本zip物件就變空了

看板Python作者 (貓橘毛發呆雕像)時間7年前 (2017/04/12 12:15), 7年前編輯推噓2(204)
留言6則, 3人參與, 最新討論串2/2 (看更多)
推文裡面的東西太多了,拉出來討論

04/10 17:33,
zip是 generator, 只能用一次
04/10 17:33

04/10 19:25,
iterator不回頭。這是從functional programming來的
04/10 19:25

04/10 19:42,
.... fp 裡面有 iterator...? 樓上是認真的嗎
04/10 19:42

04/10 21:26,
二樓說的應該是 generator, 不過仍然不太準確, 雖然這個
04/10 21:26

04/10 21:26,
概念是從 functional programming languages 開始流行,
04/10 21:26

04/10 21:27,
但本身與 functional programming 關係不大
04/10 21:27
functional programming 跟 object-oriented programming 是 programming paradigm, iterator 是 software design pattern, 個人覺得 pattern 是從某個 paradigm 來的說法蠻詭異的。

04/11 14:12,
python裡generator繼承自iterator
04/11 14:12

04/11 14:14,
但zip不是generator吧
04/11 14:14

04/11 14:15,
zip也沒有send, throw, close等methods
04/11 14:15

04/11 14:16,
至少我看ABC裡是這樣寫的
04/11 14:16

04/12 08:47,
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

04/12 16:54, , 1F
pattern是隨人講的
04/12 16:54, 1F

04/12 17:52, , 2F
感謝說明!
04/12 17:52, 2F

04/12 22:04, , 3F
你有發現我第二推比第三推多一個英文字嗎
04/12 22:04, 3F

04/12 22:05, , 4F
另外 pattern 從 paradigm 來也不是詭異的事, 不同
04/12 22:05, 4F

04/12 22:06, , 5F
paradigm 因為產生的各自需求與特性而演化出 pattern 並
04/12 22:06, 5F

04/12 22:07, , 6F
不是奇怪的歷程, 然後 pattern 再被廣義化用到其他地方
04/12 22:07, 6F
我認同 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
文章代碼(AID): #1OxQdmvQ (Python)
文章代碼(AID): #1OxQdmvQ (Python)