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 例外を使用した 2 回目の試みです。

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

私がやろうとしていることが実際には禁止されているのではないかと思いますが、なぜそうなるのかわかりません。

誰かが私のためにこれに光を当てることができますか?

編集:

したがって、2 番目の方法は機能しますが、非常に長くなります。手っ取り早い方法はありますか?

4

2 に答える 2

6

禁止されていませんが、積極的に推奨されていません。極端な状況を除いて、決してNameError捕まえるべきではありません。であっても、常にループの外側で名前をバインドします。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]
>>> 

Ignacio Vazquez-Abrams に同意します。これは良いスタイルではありません。ループする前に必要なことをしてください。

于 2012-08-10T20:36:28.533 に答える