忘记申报变量

时间:2012-08-10 20:06:29

标签: python interpreter

如果在循环内部,是否可以在循环的后续迭代期间实例化要操纵的对象,并且在循环范围被保留时仍然可用?

以下是我认为可行的一个简单示例:

>>> for i in range(2):
...   r = [] if r is None else r
...   r.append[i]
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'r' is not defined

这是我第二次尝试使用NameError异常:

>>> for i in range(2):
...   try:
...     r = r
...   except NameError:
...     r = []
...   r.append(i)
...
>>>

我怀疑我一直试图做的事实上是被禁止的,但我不明白为什么会这样。

有人可以为我提供一些启示吗?  

编辑:

所以第二种方式有效,但它很长。有快速的方法吗?

2 个答案:

答案 0 :(得分:6)

这不是禁止的,但积极劝阻。 NameError除非出现极端情况,否则永远不会被抓住总是将名称绑定在循环之外,即使是None

答案 1 :(得分:3)

您可以查看姓名是否在您的本地人中:name in locals()关于您的问题:

>>> 'r' in locals()
False
>>> for i in range(2):
    if 'r' not in locals(): r = []
    r.append(i)


>>> r
[0, 1]
>>> 

我同意Ignacio Vazquez-Abrams;这不是好风格。请在循环之前执行您需要的操作。