在给定的脚本中多次重复使用迭代变量被认为是不好的做法吗?

时间:2014-01-30 17:07:06

标签: python

在给定脚本中的多个for循环中重复使用相同的迭代变量名称被认为是不好的做法吗?

例如,

for url in urls1:
    print url

for url in urls2:
    print url

for url in urls3:
    print url

我知道url变量的范围不限于for循环,所以在for循环之外使用url变量时它有可能变得混乱而且可能更多很难理解。但我很好奇,有没有“最好”的做法?我应该使用像“url1”,“url2”这样的约定吗?或者我是否在思考这个问题,而这只是为了让它更容易理解?

4 个答案:

答案 0 :(得分:4)

一个好的变量名是一个有助于理解程序的名称(并且不会与保留或众所周知的名称冲突)。 答案可能只是主观的,但我会说,只要您使用的变量名称在所有for循环中意味着相同的东西,那就没问题。

变量的范围确实不限于for循环,但在执行下一个for循环的第一次迭代时,该值将被覆盖。相反,这样的代码会很讨厌:

for url1 in urls1:
    print url1
for url2 in urls2:
    print url1, url2

答案 1 :(得分:2)

我认为这一切都取决于具体情况。例如,在您的情况下,可以将其写为:

for url in urls1+urls2+urls3:
    print url

但你的例子是为了演示的目的。如果它只是一个你想用于迭代的循环变量,我没有看到重复使用多次相同循环变量的任何问题。另一方面,如果它有意义,您还可以为每次迭代选择一个上下文相关的名称。例如:

for base_url in urls:
    ....

for dev_url in urls:
    ...

答案 2 :(得分:1)

如果在循环中有很多代码行,你对迭代变量进行了很多操作,那么给它一个唯一的,有意义的名称可能是一个好主意,特别是如果不同的循环迭代不同类型的对象。

在其他情况下,就像在您提供的示例中一样,不同循环中的迭代变量表示相同类型的对象,并赋予它相同的名称,从而提高代码的可读性。

总而言之,您必须找到一种方法,使您的代码最具可读性。

答案 3 :(得分:1)

变量应该适用于代码的可读性。无论变量名称如何,此代码都将正常运行。我想指出一个我不时遇到的边缘情况,严格地说是在python 2.7中。

在python 2.7中使用list comprehension会泄漏目标变量名。例如

x = 'before'
a = [x for x in 1, 2, 3]
print x # this prints '3', not 'before'

我犯了这样的事情,所以我试图保持变量的独特性。 在python3中修复/更改了此错误/功能。

Reference