python中Scope范围变量的差异

时间:2017-06-20 19:42:40

标签: python loops for-loop scope

[10,20,30,40,50,60,70,80,90]

结果= for i in range(10,100,10): tens=[] tens.append(i)

[90]

结果= select * from test.score_card where (playerId in(2,3)) or (playerId not in(0));

这里的实际代码区别是什么?在这种情况下,范围变量如何相互不同?

4 个答案:

答案 0 :(得分:1)

在第二个例子中,'tens'变量在每个循环开始时被重置,所以在最后一个循环中,它被清空并且附加了'i'的最后一个值。

在第一个示例中,变量设置在循环外部,因此每次都不会重置。

答案 1 :(得分:1)

在你的第二个例子中,你正在for循环中初始化你的列表,你可以很容易地看到它在表单中写入:

for i in range(10,100,10):
 tens=[]
 tens.append(i)

如您所见,您在for循环的每个步骤中清空列表。在第一个示例中,您在 for循环之前创建了列表,因此它不会被清空。

答案 2 :(得分:0)

在第二种情况下:

for i in range(10,100,10):
    tens = []
    tens.append(i)

您正在将名为tens的新变量分配给新列表,循环的每个迭代。这意味着您要创建多个单元素列表,并向它们添加单个值,然后通过将它们替换为新列表来丢弃它们。当你在循环之后检查tens的值时,它只有最后一次迭代,即创建一个列表并向其追加90.

在第一种情况下:

tens = []
for i in range(10, 100, 10)
    tens.append(i)

在这种情况下,您只在循环前分配给tens,然后在列表中附加几个数字。如果在循环后检查tens的值,则它具有该范围内的所有值。

这与范围无关,更多的是你在每次迭代时覆盖tens成为新列表。

答案 3 :(得分:0)

首先,我建议您更新答案并正确显示代码。我假设这就是你的意思:

tens=[] 
for i in range(10,100,10): 
    tens.append(i)

print(tens) # [10,20,30,40,50,60,70,80,90]

for i in range(10,100,10): 
    tens=[] 
    tens.append(i)

print(tens) # [90]

不同之处在于,在第二个循环中,您将在每次迭代中覆盖变量tens,这导致仅输出最终语句:[90]