为什么我不必使用range()在for循环中定义变量,但在Python中必须在while循环中定义变量?

UR9*_*82T 5 python variables function range

我有以下代码使用for循环:

    total = 0
    for num in range(101):
       total = total + num
       print(total)
Run Code Online (Sandbox Code Playgroud)

现在使用while循环得到相同的结果:

    num = 0
    total = 0
    while num <= 99:
         num = num + 1
         total = total + num
         print(total)
Run Code Online (Sandbox Code Playgroud)

为什么在第一种情况下不必定义num,而在第二种情况下必须定义num呢?他们都不都是变量吗?

gmd*_*mds 2

我想从稍微不同的角度来回答这个问题。

如果我们查看官方的Python语法规范,我们可以看到(大约而言),一个while语句需要一个test,而一个for语句需要一个exprlistand testlist

从概念上讲,我们可以理解一条while语句需要一件事:一个可以重复计算的表达式。

另一方面,一条for语句需要两个:要计算的表达式的集合,以及将这些计算结果绑定到的多个名称。

考虑到这一点,while语句不会自动创建临时变量是有道理的,因为它也可以接受文字。相反,for语句必须绑定到某些名称。

(严格来说,就 Python 语法而言,将文字放在语句中期望名称的位置是有效的for,但从上下文来看,这是没有意义的,因此该语言禁止这样做。)