Python 中的 for 循环和其他语言中的 for 循环工作方式是不一样的,今天就带你深入了解 Python 的 for 循环,看看它是如何工作的,以及它为什么按照这种方式工作。
1 bucky 2018-07-13 10:02:32 +08:00 感觉写的有点误导人,squares 那个不能叫陷阱,只不过因为你预设了其它编程语言的概念而导致的错误,我觉得要讲 python 就直接讲 python,没有必要拿其它语言里的概念来对比 我发现许多讲编程语言的都喜欢这种方式,比如学过 java 的讲 python 或者 Javascript,总是非常激动讲函数作为一等对象的特性,本来很自然的概念,让这些人激动的一讲,反而容易误导别人 |
![]() | 2 kindjeff 2018-07-13 10:12:35 +08:00 所以说要理解语法先。这三个应该不至于叫陷阱吧,毕竟语法就是这样的。generator 你迭代完就是玩了;迭代 dict 的时候就是迭代的 key。 对其他语言来的一开始可能有点疑惑,但是 Python 语法确实就是这么写的~如果对 Python 熟悉就不会觉得这个是「陷阱」吧。 |
![]() | 3 hustlibraco 2018-07-13 10:16:58 +08:00 这种文章确实挺误导人的,可迭代对象和 for 循环本身就是两个东西,不能混为一谈。 |
![]() | 4 cyrbuzz 2018-07-13 10:36:55 +08:00 至少第一个不能叫陷阱吧。 生成器本身就是为了与普通的列表区分来的。生成器所使用的场景也是迭代前不生成这些数据,迭代后不在需要这些数据。如果需要多次使用的数据,为什么不直接用「列表」或者其他的数据结构而使用生成器呢? |
5 wqzjk393 2018-07-13 10:41:19 +08:00 要么就 for a in b,要么就 for i in range(0:len(b)),和 java c 的 for 就不是一回事 |
![]() | 6 bumz 2018-07-13 10:45:10 +08:00 ![]() 一点用词的区别,被作者拿来大肆渲染 一点雕虫小技被作者渲染得神乎其神 这种文章就是毒瘤,善于营销但是不善于合理引导 |
7 kidexp 2018-07-13 10:51:41 +08:00 垃圾文章 |
8 fourstring 2018-07-13 11:00:48 +08:00 已 block |
9 fourstring 2018-07-13 11:01:41 +08:00 ![]() @Lived 能否控制该营销号发帖? |
![]() | 0 imn1 2018-07-13 11:08:27 +08:00 ![]() 既然都说了「生成器」,那不知道生成器只可遍历一次? 逻辑是先有定义才有判断的,定义的意思没搞清楚、不准确,判断就会错误,就叫做「逻辑不通」了 |
![]() | 11 lance6716 2018-07-13 12:06:22 +08:00 via Android 有空看这些半吊子博文不如多熟悉官方 ref |
12 reself 2018-07-13 12:09:23 +08:00 via Android 辣鸡,block |
![]() | 13 wwqgtxx 2018-07-13 12:25:01 +08:00 via iPhone 本来还以为要从 cpython 源代码分析 for 的执行原理,点开一看都是些没啥营养的,初学者才会犯的错 |
![]() | 14 ex2vkf 2018-07-13 12:42:37 +08:00 via iPhone 标题党是万恶之源 |
16 u2386 2018-07-13 13:10:42 +08:00 via iPhone 分清列表和生成器... |
![]() | 17 zeroten 2018-07-13 13:11:28 +08:00 这种文章俗称标题党 |
![]() | 18 luw2007 2018-07-13 13:52:42 +08:00 block +1 |
19 cheneydc 2018-07-13 14:09:07 +08:00 看的我竟然笑了~唉 |
![]() | 20 Qzier 2018-07-13 14:11:23 +08:00 via iPhone Generator、Iterator、Iterable,啥子陷阱,搞什么大新闻! |
![]() | 21 araraloren 2018-07-13 15:34:14 +08:00 既然 生成器中没有了东西,再迭代为何 python 不抛异常?? |
22 XuAaron 2018-07-13 16:02:33 +08:00 生成器内部就是这样实现的,看这个还不如去看官方教程,或者推荐看 简明 python 教程,也比看这个好。 |
23 gnozix 2018-07-13 16:06:26 +08:00 这是来搞笑的? |
24 yanzixuan 2018-07-13 16:10:18 +08:00 LZ 是 UC 出来的?起个标题都这样吸引眼球? |
![]() | 25 NaVient 2018-07-13 16:16:10 +08:00 ![]() 我觉得人家虽然写得不好,可也算是用心去写了,V2 什么时候风气这样了?你们觉得简单不看就行了嘛,干嘛喷人家? |
![]() | 26 aijam 2018-07-13 16:22:48 +08:00 |
![]() | 27 TankyWoo 2018-07-13 16:29:57 +08:00 这种文章真恶心,讲生成器就好好讲,文章开头说什么陷阱,py 入门书都会说明生成器的概念和行为。 |
![]() | 28 itskingname 2018-07-13 16:41:56 +08:00 垃圾文章,看到就烦。Block |
![]() | 29 whoami9894 2018-07-13 16:51:22 +08:00 via Android 列表解析外部用小括号返回的是生成器,生成器是一次性的,跟 for 循环有啥关系,更谈不上陷阱 |
![]() | 30 Atukey 2018-07-13 16:54:03 +08:00 UC 员工吗? |
31 luozic 2018-07-13 16:54:27 +08:00 python 一开始的语法里面就有啊,入门书里面还专门提了这个区别;已经 block |
![]() | 32 doraemon1293 2018-07-13 16:57:01 +08:00 一句话总结 ()的出来的 express comprehension 是 generator 不是 tuple |
33 bin381 2018-07-13 17:00:57 +08:00 标题党 |
34 BOYPT 2018-07-13 17:06:51 +08:00 公众号毒瘤 |
35 xpresslink 2018-07-13 17:47:36 +08:00 |
![]() | 36 pynix 2018-07-13 18:08:53 +08:00 ![]() 震惊,某 Python 半吊子博主发垃圾文被大佬按在地上摩擦!!! |
37 mingyun 2018-07-13 23:46:58 +08:00 好奇公众号的链接为什么有的这么长 有的短 比如 https://mp.weixin.qq.com/s/oc0hvAr-FoJFtiDF5x2p4Q |
38 future0906 2018-07-14 13:31:15 +08:00 楼主在经营自己的公众号无疑。 从纯技术的角度讨论说,python 这样做也是有问题的,这样的语法正常的期待也是生成一个 tuple 而不是 generator。 就像: 1.type([1,2,3]) = list 2.type([x for x in xx]) = list 3.type((1,2,3)) = tuple 4.type((x for x in xx)) == generator (黑人问号???) 我猜是需要优化某总语法的性能才这样做,但也是反人类的。 就像 type((1)) = int type((1,)) = tuple 一样 |