python for循环嵌套时,内层循环不执行是为什么?
当把生成器放在所有循环的外层时
a = (x for x in range(3)) b = (x for x in range(2)) for i in a: for j in b:` print (i,j) 得到的结果
(0, 0) (0, 1) 但是如果把生成器放在循环当中
for i in (x for x in range(3)): for j in (x for x in range(2)): print (i,j) 结果就是正常的
(0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1) 这是因为当a,b生成器在放在循环外层的时候,b生成器在外部循环第一次运行的时候,就已经用尽了,随后的迭代中,内部循环使用的都是空的b,就像
for i in () 所以内部循环实际上只会在外部循环第一次运行的时候被循环一次,后面看起来就像没有被执行一样,实际是因为此时b为空了,所以要想循环正常运行,需要在内层循环运行的每次,都创建b生成器,就像第二个例子当中的那样。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。