x=4
y=3
for y in xrange(0,y):
print "Y---",y
print "X---",x
for x in xrange(0,x):
print "x",x
打印出来
Y--- 0
X--- 4
x 0
x 1
x 2
x 3
Y--- 1
X--- 3
x 0
x 1
x 2
Y--- 2
X--- 2
x 0
x 1
y按预期进展,但x减少 - 导致这种情况发生的原因是什么?
答案 0 :(得分:4)
你的内部循环重新定义x
,因此每个外部循环使它使用x
的最后一个新的较小值。这使得内循环每次都变短。
答案 1 :(得分:1)
您的变量x = 4
引用了第二个for循环中的x
变量,即for x in xrange(0,x):
,它们都在模块级范围内。因此,在内循环x的每次迭代之后,用新值来确定。
例如:
>>> x = 4
>>> for x in xrange(0, 2):
... print x
...
0
1
>>> x
1
答案 2 :(得分:1)
这是因为您使用x作为要迭代的范围的输入,以及循环的实际计数器。 x保留作为内循环的一部分给出的最后一个值,并且xrange的性质是x-1。
要查看正在进行的操作,请尝试:
x = 10
for x in xrange(5):
print x
print x
最终输出为4,因为这是x作为for循环的一部分的最后一个值。
如果您不想要此行为,请使用另一个变量作为内部循环的计数器。即。
x=4
y=3
for y in xrange(0,y):
print "Y---",y
print "X---",x
for z in xrange(0,x):
print "x",z
答案 3 :(得分:0)
与其他语言不同,Python循环不会引入新范围。这意味着使用x作为循环变量并不像你期望的那样遮蔽全局x - 相反,它会被重新分配。您可以通过循环后执行print x
来看到这一点 - 它不会恢复到其预循环值,但保留它在上一次迭代时的值。这也是它将在外循环的下一次迭代中保留的值。通过使用在循环之前不存在的循环变量,您可以更清楚地看到相同的事情:如果循环创建了新范围,则尝试打印该变量将是NameError,但它不是。