蟒:避免在循环
for element in container:
# some code here
temp_variable = f1(element)
# more code
# much later in the code
for element in container:
# some code
another_variable = g(temp_variable)
# more code
temp_variable = f2(element)
# more code
在第二for
环与分配前变量使用错误,我意外它分配之前使用可变temp_variable
。通常情况下,我会得到NameError
异常,但不幸的是,它在之前的循环中存活,有效并初始化。蟒:避免在循环
是否有任何的编码实践,IDE工具等,这将有助于防止这种错误?
顺便说一句,我就在想,如果在循环中的变量呆没有生存过循环的结束可能会更好。
编辑
@Ignacio巴斯克斯 - 艾布拉姆斯:
如果我理解正确的话,建议您不要使用相同的变量名在多个循环的局部变量。我有两个问题:
经常使用的最具描述性的变量名称在多个循环中恰好相同。说,我用了
unique_visitor_count
之类的东西。我不想禁止这个变量在代码中被进一步使用,在另一个循环中。现有的代码时,这将是非常繁重的检查,如果我想使用任何新的变量名已经被使用过。
如果代码中的'后期'太多,那么你应该把代码分解成多个函数。听起来这个功能太长了。
另一个提示是使用有意义的名称。 temp_variable
,tmp
,temp
等都不是好名字。使用描述它指向的值的名称。这将消除这类问题的一大类潜在事件。
而且,列表内涵不漏的变量,所以,如果你可以使用它们,比这只是一个原因是他们一般都比较好。但它们并不适用于所有情况。
+1:我知道理解不会泄漏变量,但我从来没有把两个和两个放在一起,所以没有看到这个好处。感谢您提出。是的,我的功能太长了,我把它分开了。 – max 2010-11-09 17:18:45
如果你不想泄漏局部变量,其他人建议把代码放在函数中。我想建议你将这些函数放入函数中。这样他们就可以访问在外部函数中定义的变量,所以你不必将它们传入。只需在需要时定义内部函数并立即调用它们,除非它们可以被重用。
def myfunc(a):
i = 10
def infunc():
for i in range(a):
print i,
infunc()
print i
myfunc(5)
>>> 0 1 2 3 4 10
这不是特别漂亮,但它确实有效,而且你不应该经常需要它。
+1只是在无法在任意位置创建名称空间而挣扎,这似乎是最好的工具(丑陋,因为它......)。 – max 2012-11-21 03:30:54
是否有任何编码实践,IDE工具等,这将有助于防止此类错误?
设计第一。代码第二。
我认为最大的编码习惯是首先不这样做。 – 2010-11-05 02:06:09