Python中循环开头与结尾执行i+=1的差异是什么?
两段while循环代码的核心差异分析
先直接说结果:第一段代码能正常结束,输出2、4、6、8、10后打印End of loop;第二段代码会陷入死循环,永远无法执行到最后的End of loop。
拆解第一段代码的执行逻辑
i = 0 while i < 10: i += 1 # 先自增,再判断奇偶 if (i % 2) != 0: continue print(i) print("End of loop")
- 初始
i=0,进入循环后先把i自增为1 - 1是奇数,触发
continue跳过后续代码,回到循环条件判断 - 后续每次循环都先完成自增:2(偶数,打印)、3(奇数,跳过)、4(打印)……直到
i变成10时,i<10不成立,循环结束,执行最后的打印语句。
拆解第二段代码的执行逻辑
i = 0 while i < 10: if (i % 2) != 0: continue # 先判断奇偶,自增在后面 print(i) i += 1 print("End of loop")
- 初始
i=0,是偶数,不触发continue,打印0后i自增为1 - 下一次循环,
i=1是奇数,触发continue,直接跳过了print(i)和i += 1 - 此时
i的值还是1,循环条件i<10永远成立,循环会无限重复,永远到不了最后的End of loop。
关于你提到的PHP/JS习惯的说明
这不是Python特有的逻辑问题,换成PHP或JS写同样逻辑的代码(把自增放在continue后面的位置),一样会触发死循环。比如写压’外 访问(社交ups“End[仔写的这段JS代码:
let i = 0; while (i < 10) { if (i % 2 !== 0) continue; console.log(i); i++; }
运行后同样会在i=1时卡住——因为continue跳过了i++,变量永远不会递增,循环条件一直满足。
本质问题是:continue会跳过当前循环剩余的所有代码,如果自增操作被continue跳过,变量值不会变化,就会导致循环条件永远成立,陷入死循环。
内容的提问来源于stack exchange,提问作者Baami
相关产品推荐
相关产品推荐

