3

是否预期 Python 中的嵌套变量会重叠?例如:

for i in range(1,10):
    x = [0xFF for i in range(6)]
    print(i)

预期的结果(序列)是什么?使用 Python 2.7,我得到了九个五分。

4

4 回答 4

4

您看到的是使用列表推导的副作用。列表推导式中的迭代器变量与 for 循环中的迭代器变量相同。这意味着列表推导的迭代器变量不是表达式本身的局部变量。

例子:

>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print x
9

所以两个迭代器变量名应该是不同的。

于 2012-09-05T09:07:02.477 回答
3

Python 没有块作用域。因此,您在块内更改的变量将在该块外可见。只有类、函数和模块才能创建作用域。

于 2012-09-05T09:07:48.180 回答
1

i将指向 range(6) 中的最后一个元素,即5,当您打印它时

当列表理解完成时,值为i5,这是您在打印时得到的

您的外部循环运行 range(1,10) 即 9 次

In [47]: len(range(1,10))
Out[47]: 9
于 2012-09-05T09:05:01.590 回答
0

当您声明任何变量时,它将存储该值。在 python 中,当您初始化任何变量并存储一些值时,它将一直可用,直到变量不会破坏。因此,当您在循环内编写时x = 10,您也会得到x循环的外侧。如果你想删除那个变量然后输入del x然后你不会得到x

于 2012-09-05T09:22:49.763 回答