【发布时间】:2014-09-01 14:54:00
【问题描述】:
这更像是一个概念性问题。我最近在 Python 中看到了一段代码(它在 2.7 中工作,它也可能在 2.5 中运行)其中 for 循环对正在迭代的列表和项目使用相同的名称在列表中,我觉得这既是不好的做法,也是根本不应该起作用的东西。
例如:
x = [1,2,3,4,5]
for x in x:
print x
print x
产量:
1
2
3
4
5
5
现在,对我来说,打印的最后一个值是循环中分配给 x 的最后一个值是有道理的,但我不明白为什么你可以为你的两个部分使用相同的变量名for 循环并使其按预期运行。它们在不同的范围内吗?允许这样的事情工作的引擎盖下发生了什么?
【问题讨论】:
-
作为一个有趣的思想实验:定义一个函数 printAndReturn,它接受一个参数,打印它,然后返回 is。那么在
for i in printAndReturn [1,2,3,4,5] …中,[1,2,3,4,5]应该打印多少次? -
关于范围的注释,因为没有其他人直接提到它:Python 具有函数级范围,但与 C 的块级范围不同。所以
for循环的内部和外部具有相同的范围。 -
我更正了问题的标题,因为它有点误导。仅仅因为某事是不好的做法并不意味着它不起作用。可能只是它更容易出错,或者难以阅读/维护等。
-
谢谢。我完全同意这是一个糟糕的标题,我只是一开始不知道该取什么名字。
-
这在 php 中也可以工作
for ($x as $x)但丑陋的代码 IMO
标签: python for-loop variable-assignment python-internals