1

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

这是我认为可能有效的一个简单示例:

>>> 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)
...
>>>

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

有人可以帮我解释一下吗?

编辑:

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

4

2 回答 2

6

它没有被禁止,但它被积极劝阻。除非出现极端情况,否则绝不应被NameError抓获始终在循环外绑定名称,即使 to None

于 2012-08-10T20:08:33.080 回答
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]
>>> 

我同意伊格纳西奥·巴斯克斯-艾布拉姆斯的观点;这不是很好的风格。请在循环之前做你需要做的事情。

于 2012-08-10T20:36:28.533 回答