Python for 循环中的陷阱

2018-07-13 08:58:56 +08:00
 hoxis

Python 中的 for 循环和其他语言中的 for 循环工作方式是不一样的,今天就带你深入了解 Python 的 for 循环,看看它是如何工作的,以及它为什么按照这种方式工作。

https://mp.weixin.qq.com/s?__biz=MjM5NjMyMjUzNg%3D%3D&mid=2448130798&idx=1&sn=baa1799ceeee81dc05ba530845c03b9d&chksm=b2f42f698583a67f7c1066dc2778809327b0ffc0e0d314b2d8757fccf794137477eadcca2285&scene=0

5713 次点击
所在节点    Python
38 条回复
bucky
2018-07-13 10:02:32 +08:00
感觉写的有点误导人,squares 那个不能叫陷阱,只不过因为你预设了其它编程语言的概念而导致的错误,我觉得要讲 python 就直接讲 python,没有必要拿其它语言里的概念来对比

我发现许多讲编程语言的都喜欢这种方式,比如学过 java 的讲 python 或者 javascript,总是非常激动讲函数作为一等对象的特性,本来很自然的概念,让这些人激动的一讲,反而容易误导别人
kindjeff
2018-07-13 10:12:35 +08:00
所以说要理解语法先。这三个应该不至于叫陷阱吧,毕竟语法就是这样的。generator 你迭代完就是玩了;迭代 dict 的时候就是迭代的 key。
对其他语言来的一开始可能有点疑惑,但是 Python 语法确实就是这么写的~如果对 Python 熟悉就不会觉得这个是「陷阱」吧。
hustlibraco
2018-07-13 10:16:58 +08:00
这种文章确实挺误导人的,可迭代对象和 for 循环本身就是两个东西,不能混为一谈。
cyrbuzz
2018-07-13 10:36:55 +08:00
至少第一个不能叫陷阱吧。
生成器本身就是为了与普通的列表区分来的。生成器所使用的场景也是迭代前不生成这些数据,迭代后不在需要这些数据。如果需要多次使用的数据,为什么不直接用「列表」或者其他的数据结构而使用生成器呢?
wqzjk393
2018-07-13 10:41:19 +08:00
要么就 for a in b,要么就 for i in range(0:len(b)),和 java c 的 for 就不是一回事
bumz
2018-07-13 10:45:10 +08:00
一点用词的区别,被作者拿来大肆渲染

一点雕虫小技被作者渲染得神乎其神

这种文章就是毒瘤,善于营销但是不善于合理引导
kidexp
2018-07-13 10:51:41 +08:00
垃圾文章
fourstring
2018-07-13 11:00:48 +08:00
已 block
fourstring
2018-07-13 11:01:41 +08:00
@Lived 能否控制该营销号发帖?
imn1
2018-07-13 11:08:27 +08:00
既然都说了「生成器」,那不知道生成器只可遍历一次?

逻辑是先有定义才有判断的,定义的意思没搞清楚、不准确,判断就会错误,就叫做「逻辑不通」了
lance6716
2018-07-13 12:06:22 +08:00
有空看这些半吊子博文不如多熟悉官方 ref
reself
2018-07-13 12:09:23 +08:00
辣鸡,block
wwqgtxx
2018-07-13 12:25:01 +08:00
本来还以为要从 cpython 源代码分析 for 的执行原理,点开一看都是些没啥营养的,初学者才会犯的错
ex2vkf
2018-07-13 12:42:37 +08:00
标题党是万恶之源
apoclast
2018-07-13 12:53:41 +08:00
浪费时间
u2386
2018-07-13 13:10:42 +08:00
分清列表和生成器...
zeroten
2018-07-13 13:11:28 +08:00
这种文章俗称标题党
luw2007
2018-07-13 13:52:42 +08:00
block +1
cheneydc
2018-07-13 14:09:07 +08:00
看的我竟然笑了~唉
Qzier
2018-07-13 14:11:23 +08:00
Generator、Iterator、Iterable,啥子陷阱,搞什么大新闻!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470443

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX