paulwang 发表于 2022-10-20 16:35:58

循环赋值问题

a=5
for b in range(a):
        print(b)
        a-=1

打印值居然是
0
1
2
3
4
我的感觉是a的值在每次循环后都-1了为什么b 还能取到4 ,难道range(a)在for 的这个语句中并不循环赋值吗?

tommyyu 发表于 2022-10-20 16:42:24

Python在执行for循环前,会先计算出range(a)的值,得到了一个range类的对象,并将b带入迭代
(用人话来说,就是range(a)是在循环前已经计算好的,循环过程中即使a改变了,也不会影响这个的值)

jackz007 发表于 2022-10-20 16:48:00

本帖最后由 jackz007 于 2022-10-20 16:54 编辑

a=5
for b in range(a):
      就是
a=5
for b in range(5):
      无论在循环内怎么修改 a 和 b ,最终,该循环几次还是几次,下一次循环 b 的值该是多少还是多少,你的改变不会对循环产生任何影响,因为,这一切都是在循环开始的时候就固定死了的。

paulwang 发表于 2022-10-20 18:08:23

jackz007 发表于 2022-10-20 16:48
就是

      无论在循环内怎么修改 a 和 b ,最终,该循环几次还是几次,下一次循环 b 的值 ...

这样确实可以理解 就是 in 后面的语句不参与循环,b参与循环
这个与下面while 的语句不一样, 如下面这个while中a b 都是参与循环的,即便是在套用公式中变量也是参与循环的?    大神不知道我这样理解对不?
a=0
b=0
while a<b:
        print(a)
        a+=1
        b-=1

jackz007 发表于 2022-10-20 18:10:37

本帖最后由 jackz007 于 2022-10-20 18:12 编辑

paulwang 发表于 2022-10-20 18:08
这样确实可以理解 就是 in 后面的语句不参与循环,b参与循环
这个与下面while 的语句不一样, 如下面这 ...

         是的,在这一点上 while 和 for 有所不同,while 是接受人为改变循环变量的。所以,有些时候适合用 while 的时候就不要用 for,当然,用 while 需要专门操心驱动循环变量

LJS1996 发表于 2022-10-22 10:10:05

看不懂
页: [1]
查看完整版本: 循环赋值问题