是否预期 Python 中的嵌套变量会重叠?例如:
for i in range(1,10):
x = [0xFF for i in range(6)]
print(i)
预期的结果(序列)是什么?使用 Python 2.7,我得到了九个五分。
是否预期 Python 中的嵌套变量会重叠?例如:
for i in range(1,10):
x = [0xFF for i in range(6)]
print(i)
预期的结果(序列)是什么?使用 Python 2.7,我得到了九个五分。
您看到的是使用列表推导的副作用。列表推导式中的迭代器变量与 for 循环中的迭代器变量相同。这意味着列表推导的迭代器变量不是表达式本身的局部变量。
例子:
>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print x
9
所以两个迭代器变量名应该是不同的。
Python 没有块作用域。因此,您在块内更改的变量将在该块外可见。只有类、函数和模块才能创建作用域。
i
将指向 range(6) 中的最后一个元素,即5
,当您打印它时
当列表理解完成时,值为i
5,这是您在打印时得到的
您的外部循环运行 range(1,10) 即 9 次
In [47]: len(range(1,10))
Out[47]: 9
当您声明任何变量时,它将存储该值。在 python 中,当您初始化任何变量并存储一些值时,它将一直可用,直到变量不会破坏。因此,当您在循环内编写时x = 10
,您也会得到x
循环的外侧。如果你想删除那个变量然后输入del x
然后你不会得到x