Python嵌套for循环首次外层迭代j输出0 1 2的原因求解
嵌套循环输出结果原因解答
核心逻辑是Python的range()函数的求值时机:range()仅在被调用生成迭代器的那一刻读取传入的变量值,后续修改变量不会改变已经生成的迭代序列内容。
我们按代码执行顺序拆解:
- 第一步初始化变量:
x = 3 - 第二步执行外层循环
for i in range(x):此时x值为3,直接生成[0,1,2]的迭代序列,后续x修改不会影响外层循环的迭代次数,所以外层固定循环3次,i依次取0、1、2。 - 第三步进入第一次外层循环(i=0):
此时执行内层循环for j in range(x),这行代码运行时,x=2还没被执行到,x的值依然是3,所以内层range直接生成[0,1,2]的迭代序列,j会依次取0、1、2输出,所以你会看到外层第一次迭代时j输出三个值。
在内层循环第一次运行时,才会执行到代码块里的x=2,把全局变量x的值修改为2,这个修改只会影响后续调用range(x)的结果。 - 后面外层i=1、i=2的迭代中,执行内层循环
for j in range(x)时,x已经被改成了2,所以内层range生成[0,1]的迭代序列,j只会输出0、1两个值,和你看到的运行结果完全匹配。
内容的提问来源于stack exchange,提问作者saleemdamry
相关产品推荐
相关产品推荐

