两个代码块不应该打印出类似的结果吗?为什么每次到达内部for语句时都会重新评估内部循环内的范围函数,而外循环中的范围函数只被评估一次?
x = 4
for j in range(x)
for i in range(x)
print i
x = 2
结果
0
1
2
3
0
1
0
1
0
1个
我知道打印的前4个整数(0 - 3)是代码的结果
对于范围(x)中的j:代码,但为什么以下也会打印?
0
1
0
1
0
1
代码
x = 4
for j in range(x):
print i
x = 5
打印
0
1
2
3
其他信息 IDLE中的Python 2.7
答案 0 :(得分:4)
函数range(x)
生成[0,1,2,3,4]
列表。在for
循环中,您将遍历此列表。
您的代码相当于:
for j in [0,1,2,3]:
for i in [0,1,2,3]:
print i
for i in [0,1]:
print i
for i in [0,1]:
print i
for i in [0,1]:
print i
答案 1 :(得分:4)
我只能通过遍历循环的迭代来解释,所以这里是:
x = 4
for j in range(x)
for i in range(x)
print i
x = 2
第一次通过。
x = 4
for j in [0, 1, 2, 3]
for i in range [0, 1, 2, 3]
print i
x = 2
打印
0
1
2
3
现在x设置为2,但外部循环范围已经执行,因此不会重新评估。
现在代码变为:
for j in [0, 1, 2, 3]:
for i in [0, 1]:
print i
x = 2
打印
0
1
这又持续了两次。
答案 2 :(得分:0)
范围(x)仅被评估一次,即当循环开始时,这就是为什么修改循环内的x没有效果。
但是,在第一个代码时钟中,你在内部将x更改为2,所以下次执行内部循环时,range只给出(0,1)。
编辑:您的第一个代码块相当于
x = 5
for i in range(x)
print i
x = 2
答案 3 :(得分:0)
以下是我的看法:
对于外循环的每次迭代执行内循环
x = 4
j = 0
for i in range (x):
print(i)
x = 2
j = 1
for i in range(x) # this x is no longer 4 but it is 2
print(i)
x = 2
j = 2
for i in range (x): # this x is, of course, 2
print(i)
x = 2
j = 3
for i in range (x): # this x is, of course, 2
print(i)
x = 2
答案 4 :(得分:-2)
j未打印,在范围(x)中的i之前在“”之前插入“ print('xx',j,'oo')”
然后更改为“ print('xx',x,'oo')
或将“对于范围(x)中的j:”更改为“对于范围(225,200,-5)中的j:”,然后在“对于范围(x)中的i:”之前加上“打印(j)” >