Python 嵌套的循环范围()
对于以下代码:Python 嵌套的循环范围(),python,python-3.x,Python,Python 3.x,对于以下代码: x = range(10) for i in x: print(i) for j in x: print(">> %d" % j) break 我本以为结果是: 0 >> 1 2 >> 3 .. 但事实是: 0 >> 0 1 >> 0 2 >> 0 .. 为什么range会有这种行为 for j in x: print(">>
x = range(10)
for i in x:
print(i)
for j in x:
print(">> %d" % j)
break
我本以为结果是:
0
>> 1
2
>> 3
..
但事实是:
0
>> 0
1
>> 0
2
>> 0
..
为什么range会有这种行为
for j in x:
print(">> %d" % j)
break
您正在中断J的循环,导致J的值每次重置并返回0。通过将x转换为an,您可以实现预期的行为
x = iter(range(10))
for i in x:
print(i)
for j in x:
print('> {}'.format(j))
break
返回
0
> 1
2
> 3
4
> 5
6
> 7
8
> 9
这向我们表明,问题不在于每次循环时内部循环的中断,而在于循环时射程没有耗尽。发生这种情况的原因是range不是迭代器,因此它每次都重新启动,而不是从它停止的地方重新启动。您正在打破内部循环,因此j每次从0开始o,假设range是iterable,但不是迭代器,这是否意味着每个for循环都会隐式地从中创建一个迭代器;不能对范围对象调用next。“这只是一个很简单的例子。”卢米索塔看看这个。这是一本好书。