在 Python 中使用“for”的无限循环

新手上路,请多包涵

为什么这不会产生无限循环?

 a=5
for i in range(1,a):
  print(i)
  a=a+1

或这个

for i in range(1,4):
  print(i)
  i=i-1

或这个

for i in range(1,4):
  print(i)
  i=1

有什么方法可以使用 for 循环创建无限循环吗?我知道有 while 循环,但我只是好奇。

原文由 Nischal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

range 是一个 ,并且像 range(1, a) 一样使用创建该类的 _对象_。该对象仅创建 _一次_,不会在循环的每次迭代中重新创建。这就是第一个示例不会导致无限循环的原因。

其他两个循环不是无限的,因为与 range 对象不同,循环变量 i 每次迭代 都会 重新创建(或者更确切地说是重新 _初始化_)。您在循环内分配给 i 的值将在循环迭代时被覆盖。

原文由 Some programmer dude 发布,翻译遵循 CC BY-SA 3.0 许可协议

在这种情况下,您不能更新 for 循环正在循环的迭代器。


range 中的 for i in range(a): 实际上是一个函数——它接受一个值a,并返回一个包含它将循环的值的对象。一旦构建了该对象,您就可以随心所欲地更改输入变量,并且该对象不会更改。

想象一下,如果我们创建自己的类似函数 my_range 生成一个列表(而内置的 range 函数生成一个 range ):

 def my_range(end):
    my_list = []
    for i in range(end):
        my_list.append(i)
    return my_list

现在,如果我们要使用我们的新功能,就像这样:

 a = 4
for i in my_range(a):
    print(i)
    a += 1

很明显,我们无法通过更改 a 来更新我们正在循环的列表对象,因为我们正在循环的列表已经创建,并且不会被重新制作在每个循环中。


你能在 python 中做一个无限循环吗?是的,只需向要循环访问的对象添加一个新条目,例如:

 my_list = [0]
for i in my_list:
    print(i)
    my_list.append(i+1)

现在我们正在更新我们正在循环的对象。

原文由 Ari Cooper-Davis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题