玥公子 发表于 2020-6-27 16:27:12

continue 和 for 语句中 i 的取值问题,谢谢前辈

for i in range(10):
    if i%2 != 0:
      print(i)
      continue
    i += 2
    print(i)
当i为偶数时,e.x. i取0,那么i +=2 后,i 就为2了。此时,返回循环条件执行for 语句时,i的取值到底是多少? (取1?还是取2?)或者说,是不管continue后面的i+=2使 i 增长成几,只要跳出再次执行for循环,i 都按顺序在(0,10)范围内依次取值? 为啥 i 不会按照 i = i +2的新值来做for循环?

Twilight6 发表于 2020-6-27 16:30:05

本帖最后由 Twilight6 于 2020-6-27 16:36 编辑



for 循环每次都会给 i 赋值,会把你之前 i 的值全部覆盖,按照 for 循环原本的顺序来,所以这里 for 循环赋值 i 不受你 循环内影响

就算你 i += 2 了,当 for 循环开始下一次的循环,首先就是对 i 的重新赋值,就把你之前 i 的值给覆盖了

简单来说 for 循环是把你 range 迭代器里面的元素拿出来 , range 函数是产生一个整数迭代器,你这里 range(10) 就是产生了一个 0~9 的迭代器

每次循环都按顺序把 0~9 的元素拿出来,重新给 i 赋值,i 在循环内部 +2 并不会影响 range 迭代器里面原有的数值,怎么会按照 +2 后的 i 循环呢?是吧~


heidern0612 发表于 2020-6-27 16:34:59

本帖最后由 heidern0612 于 2020-6-27 16:37 编辑

看你描述的头晕。

整段代码的意思是,在0到10范围内,如果i%2不为0,就打印i;否则的话i就自增2,打印i出来,就这么简单的逻辑,哪有你想那么复杂。

第一次循环,i取0,因为i%2等于0,所以自增2,打印2出来;

第二次循环,i取1,因为i%2不等于0,所以打印1,continue下一次循环;

第三次循环,i取2,因为i%2等于0,所以自增2,打印4出来,……

以下类推,for循环里的i不随着下面计算里的i变化,是因为你for循环定义的时候,next迭代器的次数就已经生成了,所以for循环的次数是不变的。

sunrise085 发表于 2020-6-27 17:25:47

for循环 i从range生成的迭代器(你这里是0到9的列表)中顺序取值,然后执行for语句块的内容,
期间修改 i 值无所谓,反正每次循环 i 都会从之前生成的迭代器中取值,所以下面执行i+=2修改i的值不影响循环的下次执行。

玥公子 发表于 2020-6-27 22:59:46

豁然开朗。非常感谢各位大神的热心帮助。

没名字能用了 发表于 2020-6-29 15:59:43

heidern0612 发表于 2020-6-27 16:34
看你描述的头晕。

整段代码的意思是,在0到10范围内,如果i%2不为0,就打印i;否则的话i就自增2,打印i出 ...

最佳答案太专业了   还是你这个明了。
页: [1]
查看完整版本: continue 和 for 语句中 i 的取值问题,谢谢前辈