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

时间:2019-05-28 05:36:10

标签: python function variables range

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

    total = 0
    for num in range(101):
       total = total + num
       print(total)

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

    num = 0
    total = 0
    while num <= 99:
         num = num + 1
         total = total + num
         print(total)

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

6 个答案:

答案 0 :(得分:3)

好吧,for是一个特殊的语句,它会自动为您定义变量。要求您事先声明变量将是多余的。

while是通用循环构造。 while语句的条件甚至不必包含变量。例如

while True: 

while my_function() > 0:

答案 1 :(得分:2)

在python中,大多数情况下不需要定义/声明变量。

规则是,如果您编写(分配)变量,则该变量是该函数的局部变量;如果您只阅读它,那么它是一个全局的。

在顶级(任何函数之外)分配的变量是全局的...因此,例如:

x = 12     # this is an assignment, and because we're outside functions x
           # is deduced to be a global

def foo():
    print(x)     # we only "read" x, thus we're talking of the global

def bar():
    x = 3        # this is an assignment inside a function, so x is local
    print(x)     # will print 3, not touching the global

def baz():
    x += 3       # this will generate an error: we're writing so it's a
                 # local, but no value has been ever assigned to it so it
                 # has "no value" and we cannot "increment" it

def baz2():
    global x     # this is a declaration, even if we write in the code
                 # x refers to the global
    x += 3       # Now fine... will increment the global

for语句只是一个写入变量的循环:如果不存在声明,则该变量将被视为局部变量;否则,该变量将被视为局部变量。如果有globalnonlocal声明,则所使用的变量将具有相应的作用域(nonlocal用于从嵌套函数中的代码写入封闭函数的局部变量:在Python中很少使用)。

答案 2 :(得分:2)

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

如果我们看一下official Python grammar specification,我们可以看到(大约),一个while语句需要一个test,而一个for语句需要一个{{ 1}}和exprlist

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

另一方面,while语句需要两个:要求值的表达式的集合,以及将这些求值结果绑定到的多个名称。 / p>

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

(严格来说,就Python语法而言,在for语句中放置一个您希望有名称的文字是有效的,但是在上下文上这没有意义,因此该语言禁止使用)

答案 3 :(得分:1)

如果您来自CC++Java之类的其他编程语言,请不要与for in的python循环混淆。

在python中,for in循环从项目列表中选择一个项目,并在所选择的项目的帮助下执行某些操作。

答案 4 :(得分:1)

For循环迭代列表中的每个元素,直到给定范围。因此,无需任何变量即可检查条件。

循环迭代直到给定条件为真。这里我们需要一些变量或值来检查条件,因此在循环之前使用了变量num。

答案 5 :(得分:0)

Python for循环分配变量并让您使用它。我们可以将for循环转换为while循环,以了解Python的实际工作方式(提示:它使用了iterables!):

iterator = iter(iterable)  # fresh new iterator object
done = False
while not done:
    try:
        item = next(iterator)
        # inside code of a for loop, we can use `item` here
    except StopIteration:
        done = True