【问题标题】:infinite for loop in R and PythonR和Python中的无限for循环
【发布时间】:2018-02-16 22:35:12
【问题描述】:

您好,我是 R 和 Python 的新手,只是想了解为什么下面的代码没有提供无限的价值:

in R :
for (i in 1:10) {
  print(i)
  i=5
}

结果:

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

在 Python 中:

for i in range(10):
    print(i)
    i = 5 

结果:

0
1
2
3
4
5
6
7
8
9

由于我们在 i 的每次迭代后将值设置为 5,它应该进入无限循环。 请帮我理解。

提前致谢。 灰烬

【问题讨论】:

  • 因为它在循环顶部被 for 语句重置。
  • 您可能会将i 重置为5,但在for 循环将i 重置为范围内的下一个值之后。
  • 首先,这将是最糟糕的无限循环方式,其次,for 循环不能那样工作! @Julien,几乎给出了解释!
  • 甚至 stackoverflow 也不能这样工作,您要求一次在 R 和 python 中进行无限循环,而不是指定为什么需要无限循环。只是一个简单的评论是可能的她。使用while循环而不打破条件,它会工作
  • @Gahan,我只是想了解一下循环是如何工作的。

标签: python r for-loop infinite-loop


【解决方案1】:

合法的问题和不公平的投票!

Ri 中,for 循环的行为就像是在每次迭代时从另一个环境(可能是这样)存储、递增和重新加载,并非在所有语言中都是这样,但在R.

来自R Inferno

8.1.64 迭代是神圣不可侵犯的

在下面的循环中,'i' 有两种用法。

> for(i in 1:3) f
+ cat("i is", i, "nn")
+ i <- rpois(1, lambda=100)
+ cat("end iteration", i, "nn")
+ g

i is 1
end iteration 93
i is 2
end iteration 91
i is 3
end iteration 101

在循环体中创建的 i 在该迭代期间使用,但 不会更改开始下一次迭代的 i。这不同于许多 其他语言(包括 S+)。

这证明 R 很难混淆,但这样的代码肯定会混淆 人类。所以避免它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多