Python:用于语句行为

Ban*_*Gap 2 python syntax

我的问题涉及本声明的结果:

for x in range(4), y in range(4):
    print x
    print y
Run Code Online (Sandbox Code Playgroud)

结果是:

[0, 1, 2, 3]
2
True
2
Run Code Online (Sandbox Code Playgroud)

似乎有一个比较涉及,我只是无法弄清楚为什么输出结构是这样的.

Amb*_*ber 6

我的猜测是你从交互式控制台运行它,并且已经y定义了值为2(否则,你会得到NameError: name 'y' is not defined).这将导致您观察到的输出.

这是因为for x in range(4), y in range(4):在评估时实际上等同于以下内容:

for x in (range(4), y in range(4)):
Run Code Online (Sandbox Code Playgroud)

减少到......

for x in ([0,1,2,3], 2 in range(4)):
Run Code Online (Sandbox Code Playgroud)

再次减少到......

for x in ([0,1,2,3], True):
Run Code Online (Sandbox Code Playgroud)

然后,这会导致循环的2次迭代for,因为它遍历元组的每个元素:

  1. x = [0,1,2,3]
  2. x = True.

(当然,y仍然是2.)