作者zerof (猫橘毛发呆雕像)
看板Python
标题Re: [问题] for 回圈取完值,原本zip物件就变空了
时间Wed Apr 12 12:15:41 2017
推文里面的东西太多了,拉出来讨论
1F:→ zerof: zip是 generator, 只能用一次04/10 17:33
2F:→ mikapauli: iterator不回头。这是从functional programming来的04/10 19:25
3F:→ zerof: .... fp 里面有 iterator...? 楼上是认真的吗04/10 19:42
4F:→ uranusjr: 二楼说的应该是 generator, 不过仍然不太准确, 虽然这个04/10 21:26
5F:→ uranusjr: 概念是从 functional programming languages 开始流行,04/10 21:26
6F:→ uranusjr: 但本身与 functional programming 关系不大04/10 21:27
functional programming 跟 object-oriented programming 是
programming paradigm, iterator 是 software design pattern, 个人觉得 pattern
是从某个 paradigm 来的说法蛮诡异的。
7F:→ mikapauli: python里generator继承自iterator04/11 14:12
8F:→ mikapauli: 但zip不是generator吧04/11 14:14
9F:→ mikapauli: zip也没有send, throw, close等methods04/11 14:15
10F:→ mikapauli: 至少我看ABC里是这样写的04/11 14:16
11F:→ 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://webptt.com/cn.aspx?n=bbs/Python/M.1491970544.A.E5A.html
12F:推 CaptainH: pattern是随人讲的 04/12 16:54
13F:推 mikapauli: 感谢说明! 04/12 17:52
14F:→ uranusjr: 你有发现我第二推比第三推多一个英文字吗 04/12 22:04
15F:→ uranusjr: 另外 pattern 从 paradigm 来也不是诡异的事, 不同 04/12 22:05
16F:→ uranusjr: paradigm 因为产生的各自需求与特性而演化出 pattern 并 04/12 22:06
17F:→ 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